我正在尝试使用此方法获取设备中的每个可启动应用程序:
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
他们有不同的应用程序标签,但包装名称相同。当我尝试打开应用程序时,它们都打开了联系人应用程序
有没有办法区分它们?或者我使用错误的方法来获取应用程序列表?
答案 0 :(得分:1)
queryIntentActivities
检索可以为给定intent
执行的所有活动。因此它可以返回具有相同包名称的活动信息。
我认为手机和通讯录相同的联系人应用
可以为同一个程序创建两个不同的图标,每个图标用于不同的活动。这是有道理的,因为MAIN/LAUNCHER intent filter
本质上告诉android该活动是应用程序的启动活动。因此,如果您将此过滤器添加到两个活动中,它将为您提供两个图标,供同一个应用程序输入不同的活动。 android的intent过滤器模型中没有任何内容强制每个应用程序只有一个启动活动。