2014-04-16 101 views
5

我想彈出一個對話框,讓用戶選擇啓動發射器並設置爲默認選項。我試過android:以編程方式選擇默認啓動器

 Intent home = new Intent(Intent.ACTION_DEFAULT); 
    home.addCategory(Intent.CATEGORY_LAUNCHER); 
    Intent chooser = Intent.createChooser(home, "Launcher"); 
    context.startActivity(chooser); 

但是彈出的對話框沒有設置默認的選項。如果已經設置了默認啓動器,下面的代碼不會彈出對話框。

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

這怎麼辦?提前感謝您的幫助。

回答

10

嘗試使用以下:

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

如果默認操作已經設定(),你可以先撥打:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

如果默認動作是不是你的,你無法編程清除它,你可以做的是檢查是否其他應用程序設置爲默認並顯示一條消息。

private boolean isMyLauncherDefault() { 
    PackageManager localPackageManager = getPackageManager(); 
    Intent intent = new Intent("android.intent.action.MAIN"); 
    intent.addCategory("android.intent.category.HOME"); 
    String str = localPackageManager.resolveActivity(intent, 
      PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName; 
    return str.equals(getPackageName()); 
} 

正如在其他應用程序的情況下,解決方法是設置爲默認,你可以創建一個fake家,安裝它(這將ForSE會議系統以清除默認的應用程序),然後將其卸載......

清單.XML

<activity 
     android:name="FakeHome" android:enabled="false"> 
     <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> 

FakeHome.java

public class FakeHome extends Activity { 

} 

某處

if(!isMyLauncherDefault()) {    
PackageManager p = getPackageManager(); 
ComponentName cN = new ComponentName(Activity.this, FakeHome.class); 
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

Intent selector = new Intent(Intent.ACTION_MAIN); 
selector.addCategory(Intent.CATEGORY_HOME);    
startActivity(selector); 

p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);    
    } 
+2

如果已經設置了默認啓動程序,則此代碼不會彈出對話框。 –

+0

你有沒有得到這個工作? – portfoliobuilder

+0

getPreferredActivities()的'''filters'參數是一個輸出參數。在呼叫沒有效果之前向列表添加過濾器項目。 –

相關問題