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;
}