【发布时间】:2014-03-12 23:32:08
【问题描述】:
我正在尝试列出包含特定意图过滤器的已安装包
例如:
意图过滤器 1
Intent intent1 = new Intent("com.this.is.sample1");
意图过滤器 2
Intent intent2 = new Intent("com.this.is.sample2");
intent2.addCategory("com.this.is.sample2.category");
意图过滤器 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);
}
}
}
}
【问题讨论】:
-
你可以用
Set代替List -
所以,我可以使用 Set
= new HastSet ... ?
标签: android android-intent package intentfilter