2016-10-26 27 views
0

如何以編程方式重置默認應用程序,哪個用戶以前選擇打開Always? 預期的最終結果是當用戶下次查看文件時再次顯示應用選擇器。如何以編程方式重置默認應用程序,哪個用戶以前選擇打開Always

謝謝。

+1

應用程序無法刪除其他應用程序作爲意圖的默認處理程序,它只能將其本身作爲默認處理程序移除(請參閱['clearPackagePreferredActivities'](https://developer.android.com/reference/android/content/ PM/PackageManager.html#clearPackagePreferredActivities(java.lang.String中))。 – Michael

回答

1

默認情況下,Android不允許。安全原因等。

但是,有一個漏洞 - 每次系統識別出一個新的組件被添加了,可以處理給定的意圖的默認重置。

所以,你需要做這樣的事情:

public void resetDefault() { 
    PackageManager manager = getPackageManager(); 
    ComponentName component = new ComponentName("com.example.app", "com.mypackage.Component"); 
    manager.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 
    manager.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 
} 

com.mypackage.Component是一個虛擬Activity,你在你的清單和未默認啓用的。它需要有一個與意圖,你想成爲默認的應用程序,像這樣的IntentFilter

<activity 
    android:name="Component" 
    android:enabled="false"> 
    <intent-filter> 
     <action android:name="android.intent.action.SOME_ACTION" /> 
     <category android:name="android.intent.category.SOME_CATEGORY" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

的方法將使虛擬組件,系統將通知新的可能的接收器中,加入(同例如,當你安裝一個新的啓動器),並將重置默認值。該代碼將禁用虛擬器,因此它不會顯示在選擇器中。

您可能需要檢查您的應用程序是否爲默認應用程序,以及是否有默認的應用程序。有關如何執行此操作的詳細信息,請參閱this answer

相關問題