2014-04-16 17 views
5

Voglio aprire una finestra di dialogo che consente all'utente di scegliere un launcher da avviare con l'opzione predefinita. Ho provatoandroid: scegliere il programma di avvio predefinito

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

Ma la finestra di dialogo spuntata da questo non ha la possibilità di impostare il valore predefinito. Mentre il codice seguente non farà apparire la finestra di dialogo se è già impostato un launcher predefinito.

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

Come si può fare? Grazie per l'aiuto in anticipo.

risposta

10

provare a utilizzare il seguente:

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

Se un'azione predefinita è già impostato (tuo), è possibile chiamare prima:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

Se l'azione predefinita non è vostra, voi non è possibile cancellarlo a livello di codice, quello che puoi fare è controllare se un'altra app è impostata come predefinita e mostrare un messaggio ..

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

Come soluzione alternativa in caso di altra applicazione è impostato come predefinito, è possibile creato una casa fake, installarlo (questo forse il sistema per cancellare l'applicazione di default) e quindi disinstallarlo ...

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

} 

Da qualche parte

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

Questo codice non comparirà nella finestra di dialogo se è già impostato un programma di avvio predefinito. –

+0

Hai mai funzionato? – portfoliobuilder

+0

Il parametro 'filters' di' getPreferredActivities() 'è un parametro di output. Aggiunta di un elemento del filtro all'elenco prima che la chiamata non abbia effetto. –

Problemi correlati