• Android开发之通过包管理器获取安装应用信息


     最近在自己写一个APP,有一个模块需要获取手机应用的一些信息。坑还是有,但都基本踩过了,自己把他实现了出来,实现方法还是很需要掌握的。底部弹出的对话框中四个选项的实现不多做说明,主要讲讲如何获取这些安装的应用信息。好了,不多说,看看效果图:

    获取手机安装应用信息:

    1.写一个JavaBean,用于存放应用信息,生产get,set方法。

    public class AppBean {
        private Drawable appIcon;
        private String appName;
        private int appSize;
        private boolean isSd=false;
        private boolean isSystem=false;
        private String appPackageName;
    
        public String getApkPath() {
            return apkPath;
        }
    
        public void setApkPath(String apkPath) {
            this.apkPath = apkPath;
        }
    
        private String apkPath;
    
        public String getAppPackageName() {
            return appPackageName;
        }
    
        public void setAppPackageName(String appPackageName) {
            this.appPackageName = appPackageName;
        }
    
        public Drawable getAppIcon() {
            return appIcon;
        }
    
        public void setAppIcon(Drawable appIcon) {
            this.appIcon = appIcon;
        }
    
        public String getAppName() {
            return appName;
        }
    
        public void setAppName(String appName) {
            this.appName = appName;
        }
    
        public int getAppSize() {
            return appSize;
        }
    
        public void setAppSize(int appSize) {
            this.appSize = appSize;
        }
    
        public boolean isSd() {
            return isSd;
        }
    
        public void setSd(boolean sd) {
            isSd = sd;
        }
    
        public boolean isSystem() {
            return isSystem;
        }
    
        public void setSystem(boolean system) {
            isSystem = system;
        }
    }

    属性写的很清楚,这里就不再多做注释。

    2.写一个工具类,通过这个工具类,获取到手机安装应用的信息。我们都知道,安卓的所有应用都在包管理中,基本上,一个应用对应着一个包信息,所以,我们可以通过包管理器获取,通过包管理器中getInstalledPackages(0);传一个0,获取到所有应用。具体实现代码:

    public static List<AppBean> getAllApk() {
            List<AppBean>appBeanList=new ArrayList<>();
            AppBean bean=null;
            PackageManager packageManager= UIUtils.getContext().getPackageManager();
            List<PackageInfo> list=packageManager.getInstalledPackages(0);
            for (PackageInfo p:list) {
                bean=new AppBean();
                bean.setAppIcon(p.applicationInfo.loadIcon(packageManager));
                bean.setAppName(packageManager.getApplicationLabel(p.applicationInfo).toString());
                bean.setAppPackageName(p.applicationInfo.packageName);
                bean.setApkPath(p.applicationInfo.sourceDir);
                File file=new File(p.applicationInfo.sourceDir);
                bean.setAppSize((int) file.length());
                int flags=p.applicationInfo.flags;
                //判断是否是属于系统的apk
                if ((flags& ApplicationInfo.FLAG_SYSTEM)!=0){
                    bean.setSystem(true);
                }else {
                    bean.setSd(true);
                }
                appBeanList.add(bean);
    
            }
            return appBeanList;
        }

    需要注意几点:

      *获取应用的应用名要通过packageManager.getApplicationLabel(p.applicationInfo).toString(),如果通过p.applicationInfo.name是拿不到应用名字的。

      *安卓中通过FlAG来标识应用是否是自带应用,判定方法如上。

      *UIUtils.getContext()是我封装的方法,用于调用Context上下文。

    3.通过JavaBean取出数据展示:

      略。

    好了,展示数据就可以由自己随意展示了,就写到这,希望这篇文章对你的生活和学习有所帮助。如果你想知道实现的效果,可以在下方评论留言,我会再下篇博客更新~

  • 相关阅读:
    使用容器出现vector subscript out of range等类似错误
    string类库中的find和rfind函数
    Codeforces Round #181 (Div. 2)
    有关C++ int long最大表示长度问题
    js之京东商城分类导航效果
    JS之轮播图自动切换效果
    js之网页倒计时效果
    Js获取当前日期时间及其它操作
    js判断浏览器之事件绑定
    js之ajax实例
  • 原文地址:https://www.cnblogs.com/lovelyYakir/p/5877481.html
Copyright © 2020-2023  润新知