我试图列出包含特定intent-filter
的已安装软件包例如:
Intent-Filter 1
Intent intent1 = new Intent("com.this.is.sample1");
Intent-Filter 2
Intent intent2 = new Intent("com.this.is.sample2");
intent2.addCategory("com.this.is.sample2.category");
Intent-Filter 3
Intent intent3 = new Intent("com.this.is.sample3");
intent3.addCategory("com.this.is.sample3.category");
我的问题
如何在1个列表中列出所有这些内容而没有重复?
目前我使用此代码但会导致重复
List<ResolveInfo> listone, listtwo, listthree, listfinal;
listone = getPackageManager().queryIntentActivities(intent1, PackageManager.GET_RESOLVED_FILTER);
listtwo = getPackageManager().queryIntentActivities(intent2, PackageManager.GET_RESOLVED_FILTER);
listthree = getPackageManager().queryIntentActivities(intent3, PackageManager.GET_RESOLVED_FILTER);
//Adding all of them into 1 List<ResolveInfo>
listfinal.addAll(listone);
listfinal.addAll(listtwo);
listfinal.addAll(listthree);
新代码,仍然包含重复
Set<ResolveInfo> newlist = new HashSet<ResolveInfo>();
List<ResolveInfo> listone, listtwo, listthree, listfinal;
listone = getPackageManager().queryIntentActivities(intent1, PackageManager.GET_RESOLVED_FILTER);
listtwo = getPackageManager().queryIntentActivities(intent2, PackageManager.GET_RESOLVED_FILTER);
listthree = getPackageManager().queryIntentActivities(intent3, PackageManager.GET_RESOLVED_FILTER);
if (listone!=null) {
for (int i = 0; i < listone.size(); i++) {
newlist.add(listone.get(i));
}
if (listtwo!=null) {
for (int j = 0; j < listtwo.size(); j++) {
newlist.add(listtwo.get(j));
}
if (listthree!=null) {
for (int k = 0; k < listthree.size(); k++) {
newlist.add(listthree.get(k));
}
if (newlist!=null) {
listfinal.addAll(newlist);
}
}
}
}
答案 0 :(得分:0)
什么算作副本?
您当前的3个列表是ResolveInfo,并且您特别要求填写此过滤器字段。因此您可能会在每个列表中找回相同的包,但使用不同的过滤器导致匹配。< / p>
假设您只需要一个没有重复项的软件包名称列表,您将需要自己进行重复数据删除 - 填充一组软件包名称可能是实现此目的的最佳方法。