Android: elegir el lanzador por defecto programatically

Quiero abrir un diálogo que permite al usuario elegir un lanzador para ser lanzado con la opción predeterminada . Lo intenté

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

Pero el diálogo aparecido por esto no tiene la opción de establecer el valor predeterminado. Mientras que el siguiente código no aparecerá el diálogo si un lanzador predeterminado ya está establecido.

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

¿Cómo se puede hacer esto? Gracias por la ayuda de antemano.

One Solution collect form web for “Android: elegir el lanzador por defecto programatically”

Intente utilizar lo siguiente:

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

Si ya está configurada una acción predeterminada (la suya ), puede llamar primero:

 getPackageManager().clearPackagePreferredActivities(getPackageName()); 

Si la acción predeterminada no es tuya, no puedes borrarla mediante programación, lo que puedes hacer es comprobar si otra aplicación está configurada como predeterminada y mostrar un mensaje.

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

Como una solución en caso de otra aplicación se establece como predeterminado, puede crear una casa fake , instalarlo (esto forse el sistema para borrar la aplicación predeterminada) y luego desinstalarlo …

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 { } 

Algun lado

 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); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.