最近在自己写一个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开发之通过包管理器获取安装应用信息的更多相关文章

  1. 当通过Nuget包管理器获取还原组时,出现 提示 “xxxxx”已拥有为“xxxxx”定义的依赖项

    当通过Nuget包管理器获取还原组件时,出现  提示 “xxxxx”已拥有为“xxxxx”定义的依赖项 时 解决方法: 工具---扩展和更新,把Nuget包管理器卸载后,重启VS,再安装,现打开VS项 ...

  2. PHP Composer 包管理器的安装和使用

    一,包管理器的安装 01,首先确定 php 命令能够全局使用,要是不能请修改环境变量 02,使用 curl 命令安装 => curl -sS http://install.phpcomposer ...

  3. [视频教程] 包管理器方式安装使用openresty新手上路

    OpenResty是一个通过Lua扩展Nginx实现的可伸缩的Web平台,内部集成了大量精良的Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态Web应用.Web ...

  4. Bower => 前端开发也有包管理器

    摘要: 一直以来npm,pip等各种包管理器好像都和前端开发没什么太大关系,当然因为nodejs的原因可能感觉npm会亲切一些,不过终归不是针对客户端的包管理工作,所以Bower的出现确实让人眼前一亮 ...

  5. 使用 Windows 包管理器 (winget) 安装 .Net

    用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ...

  6. Android开发5:布局管理器2(表格布局TableLayout)

    版本:Android4.3 API18  学习整理:liuxinming 概念      TableLayout继承了LinearLayout,因此它的本质依然是线性布局管理器.      表格布局采 ...

  7. 详解python包管理器pip安装

    pip对于使用python的朋友并不陌生,当你想安装python模块的时候一定会首先想到它.pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. 今天来说 ...

  8. windows下python的包管理器pip安装

    pip:  A tool for installing and managing Python packages. 要用到第三方包,python的版本就必须是2.7 https://pypi.pyth ...

  9. mac包管理器Homebrew安装命令

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

随机推荐

  1. c++下为使用pimpl方法的类编写高效的swap函数

    swap函数是c++中一个常用的函数,用于交换两对象的值,此外还用于在重载赋值运算符中处理自赋值情况和进行异常安全性编程(见下篇),标准模板库中swap的典型实现如下: namespace stl { ...

  2. Hadoop和HBase中出现 ssh登录 The authenticity of host 192.168.0.xxx can't be established.

    用ssh登录一个机器(换过ip地址),提示输入yes后,屏幕不断出现y,只有按ctrl + c结束 错误是:The authenticity of host 192.168.0.xxx can't b ...

  3. MFGTool2批量操作

    /********************************************************************************* * MFGTool2批量操作 * ...

  4. 《FDTD electromagnetic field using MATLAB》读书笔记 Figure 1.2

    函数f(x)用采样间隔Δx=π/5进行采样,使用向前差商.向后差商和中心差商三种公式来近似一阶导数. 书中代码: %% ---------------------------------------- ...

  5. UsernameToken 【转】

    原文:http://idior.cnblogs.com/articles/381534.html 使用用户名和密码来验证用户的身份是最普通也最常见的方法,虽然在安全性方面也比较弱,由于其运用的广泛性还 ...

  6. python面试(十四)

    1.下面代码会输出什么? map(lambda x:x*x,[y for y in range(3)]) [, , ] 答案 2.下面代码会输出什么? def f(x, l = [] ) for i ...

  7. BUG的定位与分析思路

    一般来说bug大多数存在于3个模块: 1.前台界面,包括界面的显示,兼容性,数据提交的判断,页面的跳转等等,这些bug基本都是一眼可见的,不太需要定位,当然也不排除一些特殊情况,本身数据传过来的时候就 ...

  8. java的堆和栈

    初始入门嗯:https://www.cnblogs.com/SaraMoring/p/5687466.html 堆空间:new出来的数组和对象,对象和数组没有引用指向它的时候,等待下一次垃圾回收 栈空 ...

  9. 【linux】文档查看

    cat: [root@localhost test]# cat log2013.log 2013-01 2013-02 2013-03 [root@localhost test]# cat -n lo ...

  10. 黄聪:Navicat for MySQL的1577错误解决

    今天尝试使用了Windows下的可视化mysql数据库管理工具Navicat,界面清爽,易操作上手,感觉还不错. 不过当连接上mysql后,无论打开任何一个数据库,都会提示:1577 – Cannot ...