[英]ApplicationInfo adapter in Android to display only apps with launcher intent
根据标题,我正在寻找一个解决方案,只显示具有启动器意图的应用程序。 这是我检索应用列表的代码:
public static List<ApplicationInfo> getInstalledApplication(Context context) {
PackageManager packageManager = context.getPackageManager();
List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager));
return apps;
}
是否可以添加规则以删除没有启动器意图的所有包? 谢谢
你可以使用queryIntentActivities()
;
Intent intent = new Intent()
.setAction(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
List<ApplicationInfo> appInfoList = new ArrayList<>();
for (ResolveInfo info : list) {
ApplicationInfo appInfo = packageManager.getApplicationInfo(info.activityInfo.packageName, PackageManager.GET_META_DATA);
appInfoList.add(appInfo);
}
Collections.sort(appInfoList, new ApplicationInfo.DisplayNameComparator(packageManager));
这应该为您提供Launcher活动的所有意图。 请注意,MATCH_DEFAULT_ONLY应确保您只将活动标记为应用的默认启动器活动。
编辑:小心MATCH_DEFAULT_ONLY。 它可能会减少您获得的已安装应用程序的数量。
我设法用自己使用marcus.ramsden提供的代码来解决:
public static List<ApplicationInfo> getInstalledApplication(Context context) {
PackageManager packageManager = context.getPackageManager();
List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
List<ApplicationInfo> appInfoList = new ArrayList();
for (ApplicationInfo info : apps) {
if (packageManager.getLaunchIntentForPackage(info.packageName) != null) {
appInfoList.add(info);
}
}
Collections.sort(appInfoList, new ApplicationInfo.DisplayNameComparator(packageManager));
return appInfoList;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.