2011-07-26 104 views
11

通常Android設備上有一個啓動器。 但有時用戶安裝了一些,而只有其中一個活動。哪個啓動程序正在運行?

如何檢查我的Android設備上哪個啓動器當前處於活動狀態?

謝謝。

回答

22

主屏幕從IntentACTION_MAIN開始,類別爲CATEGORY_HOME(來自javadoc的Intent)。這個意圖使用ResolveInfo知道什麼應用程序將啓動。

這會給你的默認主頁的應用程序:

final Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
final ResolveInfo res = getPackageManager().resolveActivity(intent, 0); 
if (res.activityInfo == null) { 
    // should not happen. A home is always installed, isn't it? 
} else if ("android".equals(res.activityInfo.packageName)) { 
    // No default selected  
} else { 
    // res.activityInfo.packageName and res.activityInfo.name gives you the default app 
} 

現在,如果你想知道一個正在運行的,它需要更多的時間,因爲ActivityManager緩慢:

// instead of the best, query all activities that match: 
final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0); 
// TODO from there, use ActivityManager to know which one is running and is in the list 
+2

需要提及的是,如果沒有默認的發射器和一個以上的安裝,那麼你會得到像'com.android.internal.app.ResolverActivity'。 –

3
private String findLauncherPackageName(){  
    final Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    final ResolveInfo res = getPackageManager().resolveActivity(intent, 0); 
    Log.e("ANDRO_ASYNC", String.format("findLauncherPackageName()%s",res.activityInfo.packageName)); 
    return res.activityInfo.packageName; 
} 
+1

此代碼並不總是返回活動啓動器,它將返回默認啓動器,如果有的話。 – THelper

0

只有當標記爲默認時,您才能檢查活動啓動器的標題。 otherwwise你會得到類似結果

com.android.internal.app.ResolverActivity