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

Android中的ApplicationInfo适配器,仅显示具有启动程序意图的应用程序,android,android-adapter,android-applicationinfo,Android,Android Adapter,Android Applicationinfo,根据标题,我正在寻找一种解决方案,只显示具有启动器意图的应用程序。以下是我检索应用程序列表的代码: public static List<ApplicationInfo> getInstalledApplication(Context context) { PackageManager packageManager = context.getPackageManager(); List<ApplicationInfo> apps = packageMana

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

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;
}
公共静态列表getInstalledApplication(上下文){
PackageManager PackageManager=context.getPackageManager();
列表应用程序=packageManager.GetInstalledApplication(0);
Collections.sort(apps,新的ApplicationInfo.DisplayNameComparator(packageManager));
返回应用程序;
}

是否可以添加一个规则来删除所有的包而无需启动程序?谢谢

您可以使用
查询活动()

Intent Intent=newintent()
.setAction(意图.动作\u主)
.addCategory(意图.CATEGORY_发射器);
PackageManager PackageManager=context.getPackageManager();
List List=packageManager.querytentActivities(intent,packageManager.MATCH_DEFAULT_仅限);
List-appInfoList=new-ArrayList();
用于(ResolveInfo:列表){
ApplicationInfo-appInfo=packageManager.getApplicationInfo(info.activityInfo.packageName,packageManager.GET_META_DATA);
appInfoList.add(appInfo);
}
排序(appInfoList,新的ApplicationInfo.DisplayNameComparator(packageManager));
这将为您提供启动程序活动的所有意图。注意: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;
}
公共静态列表getInstalledApplication(上下文){
PackageManager PackageManager=context.getPackageManager();
列表应用程序=packageManager.GetInstalledApplication(0);
List-appInfoList=new-ArrayList();
用于(应用程序信息:应用程序){
if(packageManager.getLaunchIntentForPackage(info.packageName)!=null){
appInfoList.add(info);
}
}
排序(appInfoList,新的ApplicationInfo.DisplayNameComparator(packageManager));
返回appInfoList;
}

。检查此项可能有帮助我检查了此项,但没有任何规则从列表中删除没有启动程序意图的应用程序:根据您的要求对其进行Smodify.ComponentInfo.GET_META_DATA not found O.oOh是的,我的错误。修正了这个例子。
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;
}