我需要知道用户可以启动的已安装应用程序列表(例如:浏览器,电子邮件,地图等)。我阅读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
方法返回)都应该具有唯一的包名。这是对的吗?
答案 0 :(得分:2)
Android通常不允许您使用相同的程序包名称安装多个应用程序。根据我的经验,第二个应用程序的.apk文件将无法安装,更不用说运行了。所以,不,你不会为每个包名称获得多个应用程序。
但是,可以通过来自同一应用程序的意图启动多个活动。你的代码不会得到它们,因为getLaunchIntentForPackage()只返回一个intent,但是每个activity都有自己的intent过滤器。 http://developer.android.com/guide/topics/intents/intents-filters.html上的“笔记本示例”有三个不同的活动,每个活动都可以从外面启动。