2011-11-28 14 views
15

Zajmuję się tworzeniem aplikacji biznesowej, która zasadniczo jest ekranem głównym i ma być używana jako domyślny ekran główny (jako "aplikacja").Jak sprawdzić, czy moja aplikacja jest domyślnym programem uruchamiającym?

Czy istnieje sposób sprawdzenia, czy mój Launcher jest domyślnym Launcherem? Dzięki!

Ps. Podobny przykład, ale do sprawdzenia GPS-settings

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

Odpowiedz

24

Ty można uzyskać listę preferowanych działań od PackageManager. Użyj metody 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

Działa dobrze. Użyłem nazwy pakietu jako trzeciego parametru, a następnie sprawdziłem długość listy 'activities'. Jeśli jest 0, oznacza to, że nie ma programu uruchamiającego. –

+0

na których przypadkach "czynności" wypełnia się więcej niż jedną pozycję w tym zapytaniu? –

+2

Dokumentacja dla [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) sugeruje, że pierwszy argument powinien być pustą listą zapełnioną przez metodę. Jakie jest dokładnie zachowanie, gdy podajesz listę, która jest już wypełniona, tak jak w twoim przykładzie? – achoo5000

5

Znaleziony moja odpowiedź tutaj:

Which launcher is running?

Mówi mi, jeśli moja działalność jest domyślny launcher czy nie ..

+0

to tylko mówi, czy wyrzutnia jest uruchomiony. Jeśli na przykład uruchomiony jest zarówno Google Now Launcher, jak i NOVA Launcher, oba będą na zwróconej liście. –

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

wersja Kotlin:

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