zoukankan      html  css  js  c++  java
  • 获取Android应用程序包文件目录---ApplicationInfo

    ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的< application>标签中收集到的,可获取应用程序启动Activity的name。

        // 根据查询条件,查询特定的ApplicationInfo
        private List<AppInfo> queryFilterAppInfo(int filter) {
            pm = this.getPackageManager();
            // 查询所有已经安装的应用程序
            List<ApplicationInfo> listAppcations = pm
                    .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
            // 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序
            Collections.sort(listAppcations,
                    new ApplicationInfo.DisplayNameComparator(pm));// 排序
            List<AppInfo> appInfos = new ArrayList<AppInfo>(); // 保存过滤查到的AppInfo
            // 根据条件来过滤
            switch (filter) {
                case FILTER_ALL_APP: // 所有应用程序
                    appInfos.clear();
                    for (ApplicationInfo app : listAppcations) {
                        appInfos.add(getAppInfo(app));
                    }
                    return appInfos;
                case FILTER_SYSTEM_APP: // 系统程序
                    appInfos.clear();
                    for (ApplicationInfo app : listAppcations) {
                        if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                            appInfos.add(getAppInfo(app));
                        }
                    }
                    return appInfos;
                case FILTER_THIRD_APP: // 第三方应用程序
                    appInfos.clear();
                    for (ApplicationInfo app : listAppcations) {
                        //非系统程序
                        if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
                            appInfos.add(getAppInfo(app));
                        }
                        //本来是系统程序,被用户手动更新后,该系统程序也成为第三方应用程序了
                        else if ((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
                            appInfos.add(getAppInfo(app));
                        }
                    }
                    break;
                case FILTER_SDCARD_APP: // 安装在SDCard的应用程序
                    appInfos.clear();
                    for (ApplicationInfo app : listAppcations) {
                        if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
                            appInfos.add(getAppInfo(app));
                        }
                    }
                    return appInfos;
                default:
                    return null;
            }
            return appInfos;
        }
    
        // 构造一个AppInfo对象 ,并赋值
        private AppInfo getAppInfo(ApplicationInfo app) {
            AppInfo appInfo = new AppInfo();
            appInfo.setAppLabel((String) app.loadLabel(pm));
            appInfo.setAppIcon(app.loadIcon(pm));
            appInfo.setPkgName(app.packageName);
            return appInfo;
        }
  • 相关阅读:
    mysql 快速生成百万条测试数据
    DEV SIT UAT
    云计算的三层SPI模型
    go的下载
    redis主从 哨兵
    Mybatis 插入操作时获取主键 (Oracle 触发器与SEQ)
    oracle创建表空间
    mycat源码分析
    js判断是否是数字通用写法
    spring aop获取目标对象的方法对象(包括方法上的注解)
  • 原文地址:https://www.cnblogs.com/mbp-study/p/10238584.html
Copyright © 2011-2022 走看看