自动恢复为以前的默认SMS应用程序



我有一个应用程序,需要临时访问设备的SMS。在Kitkat及以上,此访问仅授予默认SMS应用程序,因此我使用:

Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
startActivity(intent);

这会提出一个对话框,询问用户是否让我的应用程序成为默认的SMS应用程序。到目前为止,一切都很好。问题是,一旦我的应用程序完成操作,我就必须再次询问用户,他们是否想将以前的应用程序还原为默认SMS应用程序。

我希望通过让我的应用程序告诉Android OS不再希望成为默认的SMS应用程序来避免第二个对话框,以便以前的应用程序可以自动接管。我知道Android支持这一点,因为如果我在默认的SMS应用程序时卸载我的应用程序,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为第二个参数来调用上述方法来执行此操作。

最新更新