android 8.0获取apk大小

private void getAppTotalsizeO() {
        try {
            StorageStatsManager storageStatsManager = (StorageStatsManager) mContext.getSystemService(Context.STORAGE_STATS_SERVICE);
            StorageManager storageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
            PackageManager pm = mContext.getPackageManager();
            List<PackageInfo> packageInfos = pm.getInstalledPackages(0);
            if (checkUsagePermission()) {
                for (int i = 0; i < packageInfos.size(); i++) {
                    PackageInfo info = packageInfos.get(i);
                    ApplicationInfo ai = pm.getApplicationInfo(info.packageName, PackageManager.GET_META_DATA);
//                    UUID uuid = storageManager.getUuidForPath();
                    UUID uuid = storageManager.UUID_DEFAULT;
                    //通过包名获取uid
                    int uid = getUid(mContext, info.packageName);
                    StorageStats storageStats = storageStatsManager.queryStatsForUid(uuid, uid);
                    //获取apk大小
                    long appSizeL = storageStats.getAppBytes() + storageStats.getCacheBytes() + storageStats.getDataBytes();
                }
            } else {
                Intent intent = new Intent(Settings.INTENT_CATEGORY_USAGE_ACCESS_CONFIG);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 2222);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
//检查权限   USAGE_ACCESS_SETTINGS
 private boolean checkUsagePermission() {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
            AppOpsManager opsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
            int mode = 0;
            mode = opsManager.checkOp("android:get_usage_stats", Process.myUid(), getPackageName());
            boolean granted = mode == AppOpsManager.MODE_ALLOWED;
            if (!granted) {
                Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                startActivityForResult(intent, 1);
                return false;
            }
        }
        return true;
    }

现在获取的是所有的app,可以根据其他方法判断筛选出系统app和第三方app

猜你喜欢

转载自blog.csdn.net/sinat_21693123/article/details/80541439