自动恢复到以前的默认短信应用程序
Automatically revert to previous default SMS app
我有一个应用程序需要临时访问设备的 SMS。在 KitKat 及更高版本中,此访问权限仅授予默认短信应用程序,因此我使用的是:
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
startActivity(intent);
这会弹出一个对话框,询问用户是否让我的应用程序成为默认的短信应用程序。到目前为止,一切都很好。问题是,一旦我的应用程序完成其操作,我必须再次询问用户是否要将他们以前的应用程序恢复为默认短信应用程序。
我想要一种避免第二个对话框的方法,也许是让我的应用程序告诉 Android OS 它不再希望成为默认的 SMS 应用程序,以便之前的应用程序可以再次自动接管。我知道 Android 支持此功能,因为如果我在它是默认短信应用程序时卸载我的应用程序,Android 将自动恢复到之前的应用程序,无需用户输入。有什么方法可以在不卸载的情况下复制这种放弃控制的行为?
要有资格成为默认消息传递应用程序,您的应用程序必须在清单中注册某些活动组件。禁用其中任何一个将使您的应用程序不合格,系统应自动恢复默认设置。我们可以使用 PackageManager#setComponentEnabledSetting()
方法来禁用清单注册的组件。
例如,如果您为 SMS_DELIVER
操作注册的接收者名为 SmsReceiver
:
getPackageManager()
.setComponentEnabledSetting(new ComponentName(this, SmsReceiver.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
显然,在您的应用再次被设置为默认应用之前,您需要重新启用该组件,您可以通过将 PackageManager.COMPONENT_ENABLED_STATE_ENABLED
作为第二个参数调用上述方法来实现。
我有一个应用程序需要临时访问设备的 SMS。在 KitKat 及更高版本中,此访问权限仅授予默认短信应用程序,因此我使用的是:
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
startActivity(intent);
这会弹出一个对话框,询问用户是否让我的应用程序成为默认的短信应用程序。到目前为止,一切都很好。问题是,一旦我的应用程序完成其操作,我必须再次询问用户是否要将他们以前的应用程序恢复为默认短信应用程序。
我想要一种避免第二个对话框的方法,也许是让我的应用程序告诉 Android OS 它不再希望成为默认的 SMS 应用程序,以便之前的应用程序可以再次自动接管。我知道 Android 支持此功能,因为如果我在它是默认短信应用程序时卸载我的应用程序,Android 将自动恢复到之前的应用程序,无需用户输入。有什么方法可以在不卸载的情况下复制这种放弃控制的行为?
要有资格成为默认消息传递应用程序,您的应用程序必须在清单中注册某些活动组件。禁用其中任何一个将使您的应用程序不合格,系统应自动恢复默认设置。我们可以使用 PackageManager#setComponentEnabledSetting()
方法来禁用清单注册的组件。
例如,如果您为 SMS_DELIVER
操作注册的接收者名为 SmsReceiver
:
getPackageManager()
.setComponentEnabledSetting(new ComponentName(this, SmsReceiver.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
显然,在您的应用再次被设置为默认应用之前,您需要重新启用该组件,您可以通过将 PackageManager.COMPONENT_ENABLED_STATE_ENABLED
作为第二个参数调用上述方法来实现。