Android 获取手机中已安装apk文件信息


通过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()

源码下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值