包可以有多个启动意图吗?

时间:2012-04-25 16:12:50

标签: android android-intent

我需要知道用户可以启动的已安装应用程序列表(例如:浏览器,电子邮件,地图等)。我阅读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方法返回)都应该具有唯一的包名。这是对的吗?

1 个答案:

答案 0 :(得分:2)

Android通常不允许您使用相同的程序包名称安装多个应用程序。根据我的经验,第二个应用程序的.apk文件将无法安装,更不用说运行了。所以,不,你不会为每个包名称获得多个应用程序。

但是,可以通过来自同一应用程序的意图启动多个活动。你的代码不会得到它们,因为getLaunchIntentForPackage()只返回一个intent,但是每个activity都有自己的intent过滤器。 http://developer.android.com/guide/topics/intents/intents-filters.html上的“笔记本示例”有三个不同的活动,每个活动都可以从外面启动。