2016-12-14 120 views
4

我有一个应用程序,需要临时访问设备的短信。在(KitKat)以上,这一访问只授予默认的短信应用,所以我使用:自动恢复到以前的默认短信应用程序

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

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

我想办法避免第二个对话框,也许有我的应用程序告诉Android操作系统,它不再希望成为默认的短信应用,使以前的应用程序将自动再次接管。我知道Android支持这一点,因为如果我在默认的短信应用程序中卸载了我的应用程序,Android将自动恢复到之前的版本,无需用户输入。任何方式来复制这种行为的ceding控制而不卸载?

回答

4

为了有资格成为默认短信应用,您的应用可以在清单登记的某些活性成分。禁用它们中的任何一个都会使你的应用不合格,系统应该自动恢复默认设置。我们可以使用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作为第二个参数调用上述方法来完成。