Android: 两个应用程序包名相同。如何区分它们?
Android: Two applications have same package name. How to differentiate them?
我正在尝试使用此方法获取设备中所有可启动的应用程序:
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
Phone com.sonyericsson.android.socialphonebook
他们有不同的应用标签但相同的包名。当我尝试打开应用程序时,它们都打开了联系人应用程序。
有什么方法可以区分它们吗?还是我使用了错误的方法来获取应用程序列表?
queryIntentActivities
检索可以针对给定 intent
执行的所有活动。所以它可以 returns 具有相同包名的活动信息。
我认为 Phone 和联系人 是同一个联系人应用程序。
可以为同一个程序创建两个不同的图标,每个图标对应一个不同的 activity。这是有道理的,因为 MAIN/LAUNCHER intent filter
本质上告诉 android activity 是应用程序的起始 activity。因此,如果您将此过滤器添加到两个活动,它将为同一应用程序提供两个图标以进入不同的活动。 android 的意图过滤器模型中没有任何内容强制每个应用程序有一个且只有一个开始 activity。
我正在尝试使用此方法获取设备中所有可启动的应用程序:
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
Phone com.sonyericsson.android.socialphonebook
他们有不同的应用标签但相同的包名。当我尝试打开应用程序时,它们都打开了联系人应用程序。
有什么方法可以区分它们吗?还是我使用了错误的方法来获取应用程序列表?
queryIntentActivities
检索可以针对给定 intent
执行的所有活动。所以它可以 returns 具有相同包名的活动信息。
我认为 Phone 和联系人 是同一个联系人应用程序。
可以为同一个程序创建两个不同的图标,每个图标对应一个不同的 activity。这是有道理的,因为 MAIN/LAUNCHER intent filter
本质上告诉 android activity 是应用程序的起始 activity。因此,如果您将此过滤器添加到两个活动,它将为同一应用程序提供两个图标以进入不同的活动。 android 的意图过滤器模型中没有任何内容强制每个应用程序有一个且只有一个开始 activity。