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;
        }
  • 相关阅读:
    SQLServer 2008 还原数据库备份版本不兼容的问题
    全排列函数
    n & 1
    最长公共子序列(LCS)最长递增子序列(LIS)
    unity3DGI
    多继承的缺点
    JSON文件导入Unity3d中是空的的问题
    丑数
    整数中1出现的次数
    检测鼠标是否在UI上unity
  • 原文地址:https://www.cnblogs.com/mbp-study/p/10238584.html
Copyright © 2011-2022 走看看