2011-11-28 11 views
15

Sto sviluppando un'applicazione buissness che è essenzialmente una schermata iniziale e che si suppone sia utilizzata come schermata iniziale predefinita (essendo un'applicazione "chiosco").Come verificare se la mia applicazione è il programma di avvio predefinito

C'è un modo per controllare se il mio Launcher è il Launcher predefinito? Grazie!

Ps. esempio simile, ma per il controllo GPS-settings

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

risposta

24

È può ottenere l'elenco delle attività preferite da PackageManager. Utilizzare il metodo 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

Funziona bene. Ho usato il nome del pacchetto come terzo parametro e poi ho controllato la lunghezza dell'elenco 'activities'. Se è 0, significa non launcher. –

+0

in quali casi le "attività" devono essere riempite con più di un elemento in questa query? –

+2

La documentazione per [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) suggerisce che il primo argomento debba essere una lista vuota che viene popolata dal metodo. Qual è esattamente il comportamento quando si fornisce una lista già popolata come nell'esempio? – achoo5000

5

trovato la mia risposta qui:

Which launcher is running?

Mi dice se la mia attività è il programma di avvio di default o no ..

+0

ti dice solo se un lanciatore è in esecuzione. Ad esempio, se Google Now Launcher e NOVA Launcher sono in esecuzione, entrambi saranno nell'elenco restituito. –

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

versione Kotlin:

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