zoukankan      html  css  js  c++  java
  • AppInfoProvider提供应用信息的工具类

    package com.loaderman.demo;
    
    import android.content.Context;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.graphics.drawable.Drawable;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * <p>
     * 提供应用信息的工具类
     * <p>
     * 软件安装位置:
     * <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     * android:installLocation="internalOnly"//默认只允许安装在手机内存
     * >
     * preferExternal: 优先sdcard, 如果sdcard已满,不存在, 就安装在手机内存
     * auto: 优先手机内存
     * <p>
     * 软件安装流程:
     * 1. 默认, 第三方软件安装时, 系统将apk拷贝到data/app目录下, 完成安装! 用户可以选择将apk移动到sdcard
     * 2. 系统软件: system/app目录下
     * <p>
     * ROOT: 获取手机系统管理员权限, 默认手机出厂后都没有ROOT
     * 一旦ROOT, 所有文件都可以随意修改, 不安全
     * <p>
     * 使用一键Root大师, 刷机大师, 都可以ROOT手机
     */
    
    public class AppInfoProvider {
    
        //获取已安装的app
        public static ArrayList<AppInfo> getInstalledApps(Context ctx) {
            PackageManager pm = ctx.getPackageManager();
            List<PackageInfo> installedPackages = pm.getInstalledPackages(0);//获取已安装的app
    
            ArrayList<AppInfo> list = new ArrayList<>();
            for (PackageInfo packageInfo : installedPackages) {
                AppInfo info = new AppInfo();
    
                String packageName = packageInfo.packageName;//包名
                info.packageName = packageName;
    
                ApplicationInfo applicationInfo = packageInfo.applicationInfo;//应用信息的对象
                String name = applicationInfo.loadLabel(pm).toString();//应用名称
                Drawable icon = applicationInfo.loadIcon(pm);//图标对象
                info.name = name;
                info.icon = icon;
    
                String sourceDir = applicationInfo.sourceDir;//apk的安装路径
                File file = new File(sourceDir);
                long size = file.length();//文件大小
                info.size = size;
    
                //System.out.println(name);
                //判断软件安装位置
                //状态机
                int flags = applicationInfo.flags;//标记, 可以记录当前app的一些特性
                if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) > 0) {
                    //就认为当前app具备FLAG_EXTERNAL_STORAGE特性
                    //安装在sdcard
                    info.isSdcard = true;
                } else {
                    //安装在手机内存
                    info.isSdcard = false;
                }
    
                //判断软件类型, 用户?系统?
                if ((flags & ApplicationInfo.FLAG_SYSTEM) > 0) {
                    //就认为当前app具备FLAG_SYSTEM特性
                    //系统应用
                    info.isUserApp = false;
                } else {
                    //用户应用
                    info.isUserApp = true;
                }
    
                list.add(info);
            }
    
            return list;
        }
    
    }
    
    package com.loaderman.demo;
    
    import android.graphics.drawable.Drawable;
    
    /**
    *应用对象
     */
    
    public class AppInfo {
    
        public String   packageName;
        public String   name;
        public Drawable icon;
        public long     size;
        public boolean isSdcard;//标记是否安装在sdcard
        public boolean isUserApp;//标记是否是用户应用
    
    }
    
  • 相关阅读:
    C++ ORM ODB 入门(三)
    C++ ORM ODB 入门介绍(二)
    最简便的MySql数据库备份方法
    快速高效的破解MySQL本地和远程密码
    C++ ORM ODB 入门介绍(一)
    NeHe OpenGL教程 第三十九课:物理模拟
    NeHe OpenGL教程 第三十八课:资源文件
    NeHe OpenGL教程 第三十七课:卡通映射
    NeHe OpenGL教程 第三十六课:从渲染到纹理
    NeHe OpenGL教程 第三十五课:播放AVI
  • 原文地址:https://www.cnblogs.com/loaderman/p/6491479.html
Copyright © 2011-2022 走看看