java - Android:两个应用程序具有相同的包名。如何区分它们?

标签 java android package-name

我正在尝试使用此方法在我的设备中获取所有可启动的应用程序:

apps = new ArrayList<>();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> availableActivities = manager.queryIntentActivities(intent, 0);
for(ResolveInfo ri:availableActivities){
    AppDetail app = new AppDetail();
    app.label = ri.loadLabel(manager);
    app.name = ri.activityInfo.packageName;
    app.icon = ri.activityInfo.loadIcon(manager);
    apps.add(app);
}

我尝试打印那些应用程序的标签和包名,结果发现:
联系人 com.sonyericsson.android.socialphonebook
手机 com.sonyericsson.android.socialphonebook
他们有不同的应用标签但相同的包名。当我尝试打开应用程序时,它们都打开了联系人应用程序。
有什么方法可以区分它们吗?还是我使用了错误的方法来获取应用程序列表?

最佳答案

queryIntentActivities 检索可以为给定的 intent 执行的所有 Activity 。因此它可以返回具有相同包名的 Activity 信息。

我相信电话和联系人是同一个联系人应用。

可以为同一个程序创建两个不同的图标,一个用于每个不同的 Activity 。这是有道理的,因为 MAIN/LAUNCHER intent filter 本质上告诉 android 该 Activity 是应用程序的启动 Activity 。因此,如果您将此过滤器添加到两个 Activity ,它将为同一应用程序提供两个图标以进入不同的 Activity 。 Android 的 Intent 过滤器模型中没有任何内容强制每个应用程序只有一个启动 Activity 。

关于java - Android:两个应用程序具有相同的包名。如何区分它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345613/

相关文章:

android - Android 位置监控中的误报

java - 数据绑定(bind)不适用于大写字母包名称

Java runtime.getruntime() 没有输出

java - 为什么 firebase 用户 token 会发生变化?

java - 如何定义我自己的java到数据库对象之间的映射

android - 我该如何修复错误 "conversion to dalvik format failed with error 1"?

Android:蓝牙获取端口号失败

java - 如何将Java资源文件转换为byte[]?

java - 变量名称是否有任何限制,以免与包名称冲突?

react-native - react native : Can bundle ID and package name be different?