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开发之通过包管理器获取安装应用信息的更多相关文章
- 当通过Nuget包管理器获取还原组时,出现  提示 “xxxxx”已拥有为“xxxxx”定义的依赖项
		当通过Nuget包管理器获取还原组件时,出现 提示 “xxxxx”已拥有为“xxxxx”定义的依赖项 时 解决方法: 工具---扩展和更新,把Nuget包管理器卸载后,重启VS,再安装,现打开VS项 ... 
- PHP Composer 包管理器的安装和使用
		一,包管理器的安装 01,首先确定 php 命令能够全局使用,要是不能请修改环境变量 02,使用 curl 命令安装 => curl -sS http://install.phpcomposer ... 
- [视频教程] 包管理器方式安装使用openresty新手上路
		OpenResty是一个通过Lua扩展Nginx实现的可伸缩的Web平台,内部集成了大量精良的Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态Web应用.Web ... 
- Bower => 前端开发也有包管理器
		摘要: 一直以来npm,pip等各种包管理器好像都和前端开发没什么太大关系,当然因为nodejs的原因可能感觉npm会亲切一些,不过终归不是针对客户端的包管理工作,所以Bower的出现确实让人眼前一亮 ... 
- 使用 Windows 包管理器 (winget) 安装 .Net
		用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ... 
- Android开发5:布局管理器2(表格布局TableLayout)
		版本:Android4.3 API18 学习整理:liuxinming 概念 TableLayout继承了LinearLayout,因此它的本质依然是线性布局管理器. 表格布局采 ... 
- 详解python包管理器pip安装
		pip对于使用python的朋友并不陌生,当你想安装python模块的时候一定会首先想到它.pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. 今天来说 ... 
- windows下python的包管理器pip安装
		pip: A tool for installing and managing Python packages. 要用到第三方包,python的版本就必须是2.7 https://pypi.pyth ... 
- mac包管理器Homebrew安装命令
		ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 
随机推荐
- 彻底解决WP的TextBox中文字过长显示不出来的问题
			文字如果过长的话在TextBox中会显示不完全,这个大家都知道了,后来有人做了ExTextblock增强控件,大部分文字是可以显示出来了,不过,在某些情况下还是会有显示不全的情况. 这个时候一个解决方 ... 
- busybox microcom Segmentation fault
			/********************************************************************************* * busybox microco ... 
- springboot项目中文件的下载(解决中文乱码问题)
			最近使用springboot项目,一直以来文件都以英文格式存储,这次使用的是xls文件下载,文件名为中文的,特此记录下中文文件名的下载以及springboot中下载路径报错问题. 正文 在使用spri ... 
- 【C#】Lambda
			介绍 Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 . 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对 ... 
- 【spring源码学习】Spring @PostConstruct和@PreDestroy实例
			在Spring中,既可以实现InitializingBean和DisposableBean接口或在bean配置文件中指定 init-method 和 destroy-method 在初始化和销毁回调函 ... 
- Hibernate环境搭建+struts整合
			说明:本文档,是和struts2+hibernate的整合示例. lib下还有struts2的jar包,本示例没有显示.struts2的搭建参考struts2的环境搭建 一下载hibernate的ja ... 
- NET简单的一个画图程序
			using System; using System.Drawing; //HttpUtility.UrlEncode /// <summary> ///Curve 的摘要说明 /// & ... 
- pthread调度策略,优先级和竞争范围
			实时调度:操作系统在有限的时间内提供特定水平的服务能力.受限制的响应时间不一定是块的反应,意味着可预知的响应速度.如果系统定义_POSIX_THRAED_PRIORITY_SCHEDULING,它为线 ... 
- bzoj 4006 [JLOI2015]管道连接——斯坦纳树
			题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006 除了模板,就是记录 ans[ s ] 表示 s 合法的最小代价.合法即保证 s 里同一 ... 
- 4.Appium实现自动化安装apk
			一.代码如下所示: from appium import webdriver import os apk_path = os.path.abspath(os.path.join(os.path.dir ... 
