Android中的ApplicationInfo适配器仅显示具有启动器意图的应用程序

iGi*_*o90 2 android android-adapter android-applicationinfo

根据标题,我正在寻找一个解决方案,只显示具有启动器意图的应用程序.这是我检索应用列表的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

是否可以添加规则以删除没有启动器意图的所有包?谢谢

mar*_*den 5

你可以用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));
Run Code Online (Sandbox Code Playgroud)

这应该为您提供Launcher活动的所有意图.请注意,MATCH_DEFAULT_ONLY应确保您只将活动标记为应用的默认启动器活动.

编辑:小心MATCH_DEFAULT_ONLY.它可能会减少您获得的已安装应用程序的数量.