2013-12-09 17 views
2

我安裝了一個啓動器應用程序。並且用戶已經選擇了另一個啓動器作爲默認,這意味着當按HOME時默認啓動器會出現在前面。如何使Launcher-Pick-Up彈出窗口顯示?

我想爲用戶提供重置默認啓動器的便利。比如點擊我的啓動器UI中的按鈕將使Launcher-Pick-Up彈出窗口顯示。

Go Launcher可以做到這一點(在Go的設置視圖中)。似乎Go Launcher會執行類似於「PackageManager.clearPackagePreferredActivities(」com.android.launcher「)」來清除首選啓動器活動!

如何存檔?

回答

5

啓動器只能清除其自己的首選設置以解決安全問題。

這裏是一個變通:

登記的Manifest.xml一個樣機活動:

<activity 
     android:name="MockupLauncher" 
     android:enabled="false" 
     android:exported="false" 
     android:excludeFromRecents="true" 
     android:launchMode="singleTask" > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.HOME"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
     </intent-filter> 
    </activity> 

使用 「PackageManager.setComponentEnabledSetting」 觸發OS清除當前首選發射:

private void resetPreferedLauncher() { 

     PackageManager pm = mContext.getPackageManager(); 
     ComponentName mockupComponent = new ComponentName(MockupLauncher.class.getPackage().getName(), MockupLauncher.class.getName()); 

     pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

     Intent startMain = new Intent(Intent.ACTION_MAIN); 
     startMain.addCategory(Intent.CATEGORY_HOME); 
     startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     mContext.startActivity(startMain); 

     pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); 
     // or 
     //pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 
    } 

這就是我的做法!請享用!

+0

這裏是一個示例源代碼:https://github.com/WTCho/HomeSelector – RoFF

+0

這是如何適用於你的。清單列出了兩個系統權限作爲要求。 –

+0

這令人驚訝的爲我工作! –

相關問題