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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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取出数据展示:

  略。

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

 

以上是关于Android开发之通过包管理器获取安装应用信息的主要内容,如果未能解决你的问题,请参考以下文章

无法访问包管理器。安装android应用程序时系统是不是正在运行

如何简单快速获取Android应用包名

Android开发之获取系统所有进程信息。

Android开发之获取手机SIM卡信息

Linux环境 基础开发工具使用

获取android中所有已安装应用的图标