自动恢复为之前的默认短信应用

时间:2016-12-14 09:32:22

标签: android android-intent sms android-4.4-kitkat telephony

我有一个应用需要临时访问设备的短信。在KitKat及更高版本中,此访问权限仅授予默认的SMS应用程序,因此我正在使用:

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

这会弹出一个对话框,询问用户是否让我的应用成为默认的短信应用。到现在为止还挺好。问题是,一旦我的应用程序完成其操作,我必须再次询问用户,是否要将其以前的应用程序恢复为默认的SMS应用程序。

我想要一种避免第二个对话框的方法,可能是让我的应用告诉Android操作系统它不再希望成为默认的短信应用程序,以便之前的应用程序可以自动重新接管。我知道Android支持这个,因为如果我卸载我的应用程序,它是默认的SMS应用程序,Android将自动恢复到前一个,不需要用户输入。有没有办法在不卸载的情况下复制这种放弃控制的行为?

1 个答案:

答案 0 :(得分:4)

要成为默认消息传递应用程序,您的应用必须在清单中注册某些活动组件。禁用其中任何一个都会使您的应用不合格,系统应自动恢复默认值。我们可以使用PackageManager#setComponentEnabledSetting()方法来禁用清单注册的组件。

例如,如果您已注册SMS_DELIVER操作的Receiver名为SmsReceiver

getPackageManager()
    .setComponentEnabledSetting(new ComponentName(this, SmsReceiver.class),
                                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                                PackageManager.DONT_KILL_APP);

显然,在您的应用再次设置为默认值之前,您需要重新启用该组件,您可以通过调用上面的方法并将PackageManager.COMPONENT_ENABLED_STATE_ENABLED作为第二个参数来执行此操作。