zoukankan      html  css  js  c++  java
  • 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取出数据展示:

      略。

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

  • 相关阅读:
    Dp~Hrbust1426( 集训队的晚餐 )
    DP~数塔(hrbustoj1004)
    MyEclipse启动性能优化(----加快启动速度)
    很实用的php的缓存类文件示例
    PHP中9大缓存技术总结
    微信公众平台开发(76) 获取用户基本信息
    js中 onreadystatechange 和 onload的区别
    一个js文件导入js的函数
    PHP cURL实现模拟登录与采集使用方法详解教程
    Mysql清空表(truncate)与删除表中数据(delete)的区别
  • 原文地址:https://www.cnblogs.com/lovelyYakir/p/5877481.html
Copyright © 2011-2022 走看看