1. 程式人生 > >Android中如何正確的獲得所有App列表

Android中如何正確的獲得所有App列表

我們經常會遇到這樣的需求:列出手機中所有能開啟的App。此時我們不需要列出那些無法開啟的app,也就是沒有Activity的。網上有一些方法,都是過濾系統app的方法,將簡訊、電話這些App都過濾掉了,其實只要使用下面程式碼就行了:

private void queryFilterAppInfo() {
    PackageManager pm = this.getPackageManager();
    // 查詢所有已經安裝的應用程式
    List<ApplicationInfo> appInfos= pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已刪除,但還有安裝目錄的
List<ApplicationInfo> applicationInfos=new ArrayList<>(); // 建立一個類別為CATEGORY_LAUNCHER的該包名的Intent Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 通過getPackageManager()的queryIntentActivities方法遍歷,得到所有能開啟的app的packageName
List<ResolveInfo> resolveinfoList = getPackageManager() .queryIntentActivities(resolveIntent, 0); Set<String> allowPackages=new HashSet(); for (ResolveInfo resolveInfo:resolveinfoList){ allowPackages.add(resolveInfo.activityInfo.packageName); } for
(ApplicationInfo app:appInfos) { // if((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通過flag排除系統應用,會將電話、簡訊也排除掉 // { // applicationInfos.add(app); // } // if(app.uid > 10000){//通過uid排除系統應用,在一些手機上效果不好 // applicationInfos.add(app); // } if (allowPackages.contains(app.packageName)){ applicationInfos.add(app); } } mApplicationInfos=applicationInfos; }