通过PackageManager可以获取手机端已安装的apk文件的信息:

写法一:
@Deprecated
public List<String> getAllApps() {
List<String> packageList = new ArrayList<>();
final PackageManager packageManager = mContext.getPackageManager();
List<PackageInfo> resolveInfoList = packageManager.getInstalledPackages(0);
Log.d("caowj", "全部的应用数量:" + resolveInfoList.size());
for (PackageInfo info : resolveInfoList) {
// if ((info.applicationInfo.flags & info.applicationInfo.FLAG_SYSTEM) <= 0) {
// //非系统应用
// packageList.add(info.packageName);
// }
packageList.add(info.packageName);
}
Log.d("caowj", "非系统应用数量:" + packageList.size());
return packageList;
}
写法二:
public List<String> getAllInstalledApkInfo() {
List<String> packageList = new ArrayList<>();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
final PackageManager packageManager = mContext.getPackageManager();
List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0);
Log.d("caowj", "全部的应用数量:" + resolveInfoList.size());
for (ResolveInfo resolveInfo : resolveInfoList) {
ActivityInfo activityInfo = resolveInfo.activityInfo;
if (!isSystemPackage(activityInfo)) {
// if (!name.contains("huawei") && !name.contains("android")) {
packageList.add(activityInfo.applicationInfo.packageName);
Log.i("TAG", "getAppProcessName: " +
activityInfo.applicationInfo.loadLabel(packageManager).toString() + "---" +
activityInfo.packageName);
}
}
Log.d("caowj", "非系统应用数量:" + packageList.size());
return packageList;
}
适配Android 11:
上面两种写法在Android 11上无效:
需要添加权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
Demo
通过 PackageInfo 获取具体信息方法:
- 包名获取方法:packageInfo.packageName
- icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
- 应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
- 使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)
.requestedPermissions
通过 ResolveInfo 获取具体信息方法:
- 包名获取方法:resolve.activityInfo.packageName
- icon获取获取方法:resolve.loadIcon(packageManager)
- 应用名称获取方法:resolve.loadLabel(packageManager).toString()