ResolveInfo 和ApplicationInfo
时间: 2024-04-06 10:33:35 浏览: 92
ResolveInfo和ApplicationInfo都是Android中的类,但是它们的作用略有不同。
ResolveInfo类提供了一个关于能够处理特定Intent的组件的信息,它包含了一个Activity、Service或BroadcastReceiver的信息,例如它的名称、包名、Icon等等。ResolveInfo可以通过PackageManager中的queryIntentActivities()、queryIntentServices()、queryBroadcastReceivers()等方法获取。
而ApplicationInfo是一个应用程序的信息,它包含了应用程序的名称、包名、版本、Icon、签名证书等等。在AndroidManifest.xml中声明的组件(Activity、Service、BroadcastReceiver等)都是由ApplicationInfo表示的。可以通过PackageManager中的getPackageInfo()获取一个应用程序的ApplicationInfo。
相关问题
android使用ResolveInfo过滤出在launch界面显示的应用但是有的应用显示两次怎么解决
如果一个应用在launch界面显示了两次,可能是因为该应用有两个入口点(即两个Activity)被添加到了Android系统的应用列表中。你可以通过以下步骤来解决这个问题:
1. 使用PackageManager的queryIntentActivities()方法获取所有能匹配到指定Intent的Activity列表。
2. 遍历Activity列表,将其中重复的Activity去重。
3. 将去重后的Activity列表转化为应用列表,即一个应用只保留一个入口点。
示例代码如下:
```
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0);
List<ApplicationInfo> appList = new ArrayList<>();
Set<String> packageNameSet = new HashSet<>();
for (ResolveInfo resolveInfo : resolveInfoList) {
if (!packageNameSet.contains(resolveInfo.activityInfo.packageName)) {
packageNameSet.add(resolveInfo.activityInfo.packageName);
appList.add(resolveInfo.activityInfo.applicationInfo);
}
}
```
这样就能够过滤出在launch界面显示的应用并去除重复了。
阅读全文