2011-11-28 7 views
15

Estoy desarrollando una aplicación buissness que es esencialmente una pantalla de inicio, y se supone que se usa como pantalla de inicio predeterminada (que es una aplicación "kiosco").Cómo comprobar si mi aplicación es el iniciador predeterminado

¿Hay alguna forma de comprobar si mi Iniciador es el Iniciador predeterminado? Gracias!

Ps. ejemplo similar, pero para comprobar la configuración de GPS-

LocationManager alm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) { 
    Stuffs&Actions; 
} 

Respuesta

24

Usted puede obtener una lista de actividades preferidas desde PackageManager. Use el método getPreferredActivities().

boolean isMyLauncherDefault() { 
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); 
    filter.addCategory(Intent.CATEGORY_HOME); 

    List<IntentFilter> filters = new ArrayList<IntentFilter>(); 
    filters.add(filter); 

    final String myPackageName = getPackageName(); 
    List<ComponentName> activities = new ArrayList<ComponentName>(); 
    final PackageManager packageManager = (PackageManager) getPackageManager(); 

    // You can use name of your package here as third argument 
    packageManager.getPreferredActivities(filters, activities, null); 

    for (ComponentName activity : activities) { 
     if (myPackageName.equals(activity.getPackageName())) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Funciona bien. Usé el nombre del paquete como tercer parámetro y luego verifiqué la longitud de la lista de 'actividades'. Si es 0, significa no iniciador. –

+0

¿en qué casos se llenarían las "actividades" con más de un elemento en esta consulta? –

+2

La documentación de [getPreferredActivities] (http://developer.android.com/reference/android/content/pm/PackageManager.html#getPreferredActivities%28java.util.List%3Candroid.content.IntentFilter%3E,%20java.util .List% 3Candroid.content.ComponentName% 3E,% 20java.lang.String% 29) sugiere que el primer argumento debe ser una lista vacía que se rellena con el método. ¿Cuál es exactamente el comportamiento cuando está dando una lista que ya está poblada como en su ejemplo? – achoo5000

5

encontrado mi respuesta aquí:

Which launcher is running?

Me dice si mi actividad es el lanzador por defecto o no ..

+0

sólo le indica si un lanzador está en marcha. Si ambos, Google Now Launcher y NOVA Launcher se están ejecutando, por ejemplo, ambos estarán en la lista devuelta. –

0
boolean isHomeApp() { 
    final Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    final ResolveInfo res = getPackageManager().resolveActivity(intent, 0); 
    if (res.activityInfo != null && getPackageName() 
      .equals(res.activityInfo.packageName)) { 
     return true; 
    } 
    return false; 
} 
0

versión Kotlin:

val Context.isMyLauncherDefault: Boolean 
    get() = ArrayList<ComponentName>().apply { 
    packageManager.getPreferredActivities(
     arrayListOf(IntentFilter(ACTION_MAIN).apply { addCategory(CATEGORY_HOME) }), 
     this, 
     packageName 
    ) 
    }.isNotEmpty() 
Cuestiones relacionadas