2014-04-16 69 views
5

Chcę wyświetlić okno dialogowe, które umożliwia użytkownikowi wybranie programu uruchamiającego, który zostanie uruchomiony z ustawieniem domyślnej opcji. Spróbowałem:android: wybierz domyślnie program uruchamiający programowo

Ale okno dialogowe pop-up nie ma opcji ustawienia domyślnego. Poniższy kod nie wyświetli okna dialogowego, jeśli domyślny program uruchamiający jest już ustawiony.

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

Jak można tego dokonać? Dzięki za pomoc z góry.

Odpowiedz

10

Spróbuj użyć następujących czynności:

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

Jeśli domyślną akcją jest już ustawiony (swoje), można najpierw zadzwonić:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

Jeśli domyślna akcja nie jest twoje, ty nie można go usunąć programowo, można tylko sprawdzić, czy inna aplikacja jest ustawiona jako domyślna i wyświetlać komunikat.

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()); 
} 

Jako obejście w przypadku innych aplikacji jest ustawiona jako domyślna, można stworzył fake domu, zainstaluj go (będzie forse systemu, aby usunąć domyślną aplikację), a następnie go odinstalować ...

Oczywisty .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 { 

} 

Somewhere

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

Ten kod nie wyświetli okna dialogowego, jeśli domyślny program uruchamiający jest już ustawiony. –

+0

Czy zdarzyło Ci się, że to zadziałało? – portfoliobuilder

+0

Parametr 'filters' parametru' getPreferredActivities() 'jest parametrem wyjściowym. Dodanie elementu filtru do listy przed wywołaniem efektu. –