2016-12-14 119 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作爲第二個參數調用上述方法來完成。