簡體   English   中英

Android中的ApplicationInfo適配器僅顯示具有啟動器意圖的應用程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM