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

Java Android:两个应用程序具有相同的包名。如何区分它们?,java,android,package-name,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); fo

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

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);
}
apps=newarraylist();
意图=新意图(Intent.ACTION\u MAIN,空);
intent.addCategory(intent.CATEGORY_启动器);
List availableActivities=manager.querytentActivities(intent,0);
for(ResolveInfo ri:availableActivities){
AppDetail app=新的AppDetail();
app.label=ri.loadLabel(管理器);
app.name=ri.activityInfo.packageName;
app.icon=ri.activityInfo.loadIcon(管理器);
apps.add(app);
}
我试图打印这些应用程序的标签和软件包名称,结果发现:
联系人
com.sonyericsson.android.socialphonebook

手机
com.sonyericsson.android.socialphonebook

它们有不同的应用程序标签,但有相同的软件包名称。当我试图打开应用程序时,两个应用程序都打开了联系人应用程序。

有没有办法区分它们?还是我使用了错误的方法来获取应用程序列表?

queryintentivities
检索可以为给定的
意图执行的所有活动。因此,它可以返回具有相同包名的活动信息

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


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

不能安装两个同名的应用程序。当您尝试安装时,它们会发生冲突,第二个安装将失败,或者覆盖原始安装。你在这里看到的是同一个应用程序中的两个独立活动设置为可启动,这是完全合法的。你可以在启动器中拥有你想要的任意多个列表。是的,你是对的。经过进一步检查,我注意到它们实际上是同一个应用程序。不过,这提出了另一个问题。如何从软件包名称中获取手机应用的标签和图标?我应该再问一个问题,还是可以在这里问?很高兴你解决了。但我相信这并不常见!