获取手机已安装的APP的信息,包括APK文件数据

获取手机已安装的APP的信息,包括APK文件数据_第1张图片

 

这个功能在华为手机上测试了,其他机型不确定是不是可以啊。核心的工具类贴出来,列表展示相关的自行编写。

public class ApkInfoManager {
    private static ApkInfoManager appInfoManager;

    private ApkInfoManager() {

    }

    public static ApkInfoManager getInstance() {
        if (appInfoManager == null) {
            appInfoManager = new ApkInfoManager();
        }
        return appInfoManager;
    }

    public List getAppInfoList(Context context) {
        List resolveInfos = initApp(context);
        ArrayList appInfoEntities = new ArrayList<>();
        if (resolveInfos != null && resolveInfos.size() > 0) {
            for (ResolveInfo resolveInfo : resolveInfos) {
                ApkInfoEntity appInfoEntity = new ApkInfoEntity();
                appInfoEntity.setAppName(resolveInfo.loadLabel(context.getPackageManager()).toString());
                appInfoEntity.setIconDrawable(resolveInfo.loadIcon(context.getPackageManager()));
                appInfoEntity.setPageName(resolveInfo.activityInfo.packageName);
                appInfoEntity.setAppVersion(getVersion(context, resolveInfo.activityInfo.packageName));
                appInfoEntity.setAppVersionCode(getVersionCode(context, resolveInfo.activityInfo.packageName));
                String appDir = null;
                try {
                    // 指定包名的程序源文件路径
                    appDir = context.getPackageManager().getApplicationInfo(
                            resolveInfo.activityInfo.packageName, 0).sourceDir;
                } catch (PackageManager.NameNotFoundException e) {
                    e.printStackTrace();
                }
                appInfoEntity.setApkPath(appDir);
                appInfoEntities.add(appInfoEntity);
                File file = new File(appDir);
                if (file.exists()){
                    appInfoEntity.setApkSize(fileSizeFromat(file.length()).toString());
                }
            }
        }
        return appInfoEntities;
    }

    public List getResolveInfoList(Context context) {
        List resolveInfos = initApp(context);
        return resolveInfos;
    }

    /**
     * 获取app code
     * @param context
     * @param pageName
     * @return
     */
    private long getVersionCode(Context context, String pageName) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(
                    pageName, 0);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                return packageInfo.getLongVersionCode();
            } else {
                return packageInfo.versionCode;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 获取APP版本号
     * @param context
     * @param pageName
     * @return
     */
    private String getVersion(Context context, String pageName) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(
                    pageName, 0);
            return packageInfo.versionName;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 初始化app列表
     */
    private List initApp(final Context context) {
        // 获取应用列表
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        List mApps = (ArrayList) context.getPackageManager().queryIntentActivities(intent, 0);
        // 排序
        Collections.sort(mApps, new Comparator() {

            @Override
            public int compare(ResolveInfo a, ResolveInfo b) {
                PackageManager pm = context.getPackageManager();
                return String.CASE_INSENSITIVE_ORDER.compare(a.loadLabel(pm)
                        .toString(), b.loadLabel(pm).toString());
            }
        });
        return mApps;
    }

    /**
     * 格式化文件大小文本
     * @param fileS
     * @return
     */
    private ApkInfoEntity.FileSizeEntity fileSizeFromat(long fileS){
        DecimalFormat df = new DecimalFormat("#0.00");
        ApkInfoEntity.FileSizeEntity fileSizeEntity = new ApkInfoEntity.FileSizeEntity();
        String fileSizeString = "0.00";
        String tagSize="MB";
        if (fileS < 1024 * 1024 * 10) {
            fileSizeString = df.format((double) fileS / 1048576);
            tagSize = "MB";
        } else if (fileS < 1024 * 1024 * 100) {
            df = new DecimalFormat("#0.0");
            fileSizeString = df.format((double) fileS / 1048576);
            tagSize = "MB";
        } else if (fileS < 1024 * 1024 * 1000) {
            df = new DecimalFormat("#000");
            fileSizeString = df.format((double) fileS / 1048576);
            tagSize = "MB";
        } else if (fileS < 1024 * 1024 * 1024 * 10L) {
            df = new DecimalFormat("#0.00");
            fileSizeString = df.format((double) fileS / (double) 1073741824);
            tagSize = "GB";
        } else if (fileS < 1024 * 1024 * 1024 * 100L) {
            df = new DecimalFormat("#00.0");
            fileSizeString = df.format((double) fileS / (double) 1073741824);
            tagSize = "GB";

        } else if (fileS < 1024 * 1024 * 1024 * 1000L) {
            df = new DecimalFormat("#000");
            fileSizeString = df.format((double) fileS / (double) 1073741824);
            tagSize = "GB";
        }
        fileSizeEntity.setFileSize(fileSizeString);
        fileSizeEntity.setTagSize(tagSize);
        return fileSizeEntity;
    }
}

 

public class ApkInfoEntity implements Serializable{
    private String appName;
    private String pageName;
    private Drawable iconDrawable;
    private String appVersion;
    private long appVersionCode;
    private String apkPath;
    private String apkSize;

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getPageName() {
        return pageName;
    }

    public void setPageName(String pageName) {
        this.pageName = pageName;
    }

    public Drawable getIconDrawable() {
        return iconDrawable;
    }

    public void setIconDrawable(Drawable iconDrawable) {
        this.iconDrawable = iconDrawable;
    }

    public String getAppVersion() {
        return appVersion;
    }

    public void setAppVersion(String appVersion) {
        this.appVersion = appVersion;
    }

    public long getAppVersionCode() {
        return appVersionCode;
    }

    public void setAppVersionCode(long appVersionCode) {
        this.appVersionCode = appVersionCode;
    }

    public String getApkPath() {
        return apkPath;
    }

    public void setApkPath(String apkPath) {
        this.apkPath = apkPath;
    }

    public String getApkSize() {
        return apkSize;
    }

    public void setApkSize(String apkSize) {
        this.apkSize = apkSize;
    }
    public static class FileSizeEntity implements Serializable {
        private String fileSize;
        private String tagSize;

        public String getFileSize() {
            return fileSize;
        }

        public void setFileSize(String fileSize) {
            this.fileSize = fileSize;
        }

        public String getTagSize() {
            return tagSize;
        }

        public void setTagSize(String tagSize) {
            this.tagSize = tagSize;
        }
    }
}

 

你可能感兴趣的:(Android)