我需要知道用户可以启动的已安装应用程序的列表(例如:浏览器、电子邮件、 map 等)。我读过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);
}
}
通过这种方式,我获得了可以启动的应用程序列表。这些应用程序中的每一个都以包名称为特征,因此如果我想启动其中一个应用程序,只需通过指定包名称来获取包的启动 Intent 即可。
这意味着每个包最多有一个可以启动的 Activity ,因此每个应用程序(由 getInstalledApplications
方法返回)应该有一个唯一的包名称。这是正确的吗?
最佳答案
Android 通常不允许您使用相同的包名称安装多个应用程序。根据我的经验,第二个应用程序的 .apk 文件将无法安装,更不用说运行了。因此,不,每个包名称不会获得多个应用程序。
不过,可以通过同一应用程序的 Intent 启动多个 Activity 。您的代码将无法获取它们,因为 getLaunchIntentForPackage() 仅返回一个 Intent ,但每个 Activity 都可以有自己的 Intent 过滤器。 “记事本示例”位于 http://developer.android.com/guide/topics/intents/intents-filters.html具有三个不同的 Activity ,每个 Activity 都可以从外部启动。
关于android - 一个软件包是否可以有多个启动 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319572/