2012-04-25 17 views
2

我需要知道用戶可以啓動的已安裝應用程序的列表(例如:瀏覽器,電子郵件,地圖等)。我讀this question有關getInstalledApplications方法,所以我寫了下面的代碼:包裹可以有多個發射意圖嗎?

final PackageManager pm = getPackageManager(); 
List<ApplicationInfo> apps = pm.getInstalledApplications(PackageManager.GET_META_DATA); 
for (ApplicationInfo app : apps) { 
    Intent launchIntent = pm.getLaunchIntentForPackage(app.packageName); 
if (launchIntent != null) { 
     Log.d(LOG_TAG, "getApplicationLabel: " + pm.getApplicationLabel(app)); 
     Log.d(LOG_TAG, "loadLabel: " + app.loadLabel(pm)); 
     Log.d(LOG_TAG, "packageName: " + app.packageName); 
     Log.d(LOG_TAG, "name: " + app.name); 
    } 
} 

這樣,我又得到了可以啓動的應用程序列表。這些應用程序中的每一個都以包名稱爲特徵,所以如果我想啓動其中的一個應用程序,只需指定包名即可獲取包的啓動意向。 這意味着每個軟件包至多有一個可以啓動的活動,因此每個應用程序(由getInstalledApplications方法返回)應該具有唯一的軟件包名稱。那是對的嗎?

回答

2

Android通常不會讓您使用相同的軟件包名稱安裝多個應用程序。根據我的經驗,第二個應用的.apk文件不會安裝,更不用說運行了。所以,不,你不會爲每個軟件包名稱獲得多個應用程序。

雖然可以通過來自同一應用程序的意圖啓動多個活動。你的代碼不會得到它們,因爲getLaunchIntentForPackage()只返回一個意圖,但每個活動都可以有它自己的意圖過濾器。 http://developer.android.com/guide/topics/intents/intents-filters.html的「記事本示例」有三個不同的活動,每個活動都可以從外部啓動。

+0

另外考慮Google的地圖應用程序 - 您可以將其作爲「地圖」或「導航」啓動。 – 2012-04-25 16:36:25

+0

@AndrewAylett:然而'getLaunchIntentForPackage'方法只返回一個意圖。 – enzom83 2012-04-25 16:40:08

+1

所有這些帶來的明顯問題是,「如何獲得給定應用程序的所有啓動意圖集?」其中,我不知道那個答案。 – mjfgates 2012-04-25 16:42:35