我需要知道用戶可以啓動的已安裝應用程序的列表(例如:瀏覽器,電子郵件,地圖等)。我讀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
方法返回)應該具有唯一的軟件包名稱。那是對的嗎?
另外考慮Google的地圖應用程序 - 您可以將其作爲「地圖」或「導航」啓動。 – 2012-04-25 16:36:25
@AndrewAylett:然而'getLaunchIntentForPackage'方法只返回一個意圖。 – enzom83 2012-04-25 16:40:08
所有這些帶來的明顯問題是,「如何獲得給定應用程序的所有啓動意圖集?」其中,我不知道那個答案。 – mjfgates 2012-04-25 16:42:35