AndroidですべてのAppリストを正しく入手する方法

2361 ワード

携帯電話で開くことができるすべてのAppをリストするというニーズによく遭遇します.開いていないapp、つまりActivityがないものをリストする必要はありません.ネット上でいくつかの方法があって、すべてシステムappの方法を濾過して、メール、電話のこれらのAppをすべて濾過して、実は下のコードを使うだけでいいです:
private void queryFilterAppInfo() {
    PackageManager pm = this.getPackageManager();
    //              
    List appInfos= pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES     ,        
    List applicationInfos=new ArrayList<>();

    //        CATEGORY_LAUNCHER     Intent
    Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
    resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);

    //   getPackageManager() queryIntentActivities    ,        app packageName
    List  resolveinfoList = getPackageManager()
            .queryIntentActivities(resolveIntent, 0);
    Set 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;
}