AppInfoProvider提供应用信息的工具类
package com.loaderman.demo; import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import java.io.File;
import java.util.ArrayList;
import java.util.List; /**
* <p>
* 提供应用信息的工具类
* <p>
* 软件安装位置:
* <manifest xmlns:android="http://schemas.android.com/apk/res/android"
* android:installLocation="internalOnly"//默认只允许安装在手机内存
* >
* preferExternal: 优先sdcard, 如果sdcard已满,不存在, 就安装在手机内存
* auto: 优先手机内存
* <p>
* 软件安装流程:
* 1. 默认, 第三方软件安装时, 系统将apk拷贝到data/app目录下, 完成安装! 用户可以选择将apk移动到sdcard
* 2. 系统软件: system/app目录下
* <p>
* ROOT: 获取手机系统管理员权限, 默认手机出厂后都没有ROOT
* 一旦ROOT, 所有文件都可以随意修改, 不安全
* <p>
* 使用一键Root大师, 刷机大师, 都可以ROOT手机
*/ public class AppInfoProvider { //获取已安装的app
public static ArrayList<AppInfo> getInstalledApps(Context ctx) {
PackageManager pm = ctx.getPackageManager();
List<PackageInfo> installedPackages = pm.getInstalledPackages(0);//获取已安装的app ArrayList<AppInfo> list = new ArrayList<>();
for (PackageInfo packageInfo : installedPackages) {
AppInfo info = new AppInfo(); String packageName = packageInfo.packageName;//包名
info.packageName = packageName; ApplicationInfo applicationInfo = packageInfo.applicationInfo;//应用信息的对象
String name = applicationInfo.loadLabel(pm).toString();//应用名称
Drawable icon = applicationInfo.loadIcon(pm);//图标对象
info.name = name;
info.icon = icon; String sourceDir = applicationInfo.sourceDir;//apk的安装路径
File file = new File(sourceDir);
long size = file.length();//文件大小
info.size = size; //System.out.println(name);
//判断软件安装位置
//状态机
int flags = applicationInfo.flags;//标记, 可以记录当前app的一些特性
if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) > 0) {
//就认为当前app具备FLAG_EXTERNAL_STORAGE特性
//安装在sdcard
info.isSdcard = true;
} else {
//安装在手机内存
info.isSdcard = false;
} //判断软件类型, 用户?系统?
if ((flags & ApplicationInfo.FLAG_SYSTEM) > 0) {
//就认为当前app具备FLAG_SYSTEM特性
//系统应用
info.isUserApp = false;
} else {
//用户应用
info.isUserApp = true;
} list.add(info);
} return list;
} }
package com.loaderman.demo; import android.graphics.drawable.Drawable; /**
*应用对象
*/ public class AppInfo { public String packageName;
public String name;
public Drawable icon;
public long size;
public boolean isSdcard;//标记是否安装在sdcard
public boolean isUserApp;//标记是否是用户应用 }
AppInfoProvider提供应用信息的工具类的更多相关文章
- Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类
Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...
- Android开发之获取APP的应用程序名称以及版本名称信息java工具类
//跟App相关的辅助类 public class AppUtils { private AppUtils() { /* cannot be instantiated */ throw new Uns ...
- Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils)
依赖于java.security.MessageDigest,支持MD5,SHA-1,SHA-256 import java.security.MessageDigest; import java.s ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- Spring常用工具类
Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作: 1.Resource访问文件资源: 具体有: ResourceUtils.getFile(url); FileSystemReso ...
- spring中常用工具类介绍
http://www.cnblogs.com/langtianya/p/3875103.html 文件资源操作 Spring 定义了一个 org.springframework.core.io ...
- 工具类HttpServerUtility
在ASP.NET服务器上提供一个辅助的工具类HttpServerUtility,该类提供了一些处理请求的辅助方法. MapPath:计算网站中虚拟路径所对应的物理文件路径. HtmlEncode:将H ...
- Spring 的优秀工具类盘点
文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...
- spring常用的工具类
spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入 ...
随机推荐
- 1、Bash Shell
一.什么是Bash shell BashShell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕. 当我们 ...
- STM32WB AHB总线、APB总线与外设
方框图: 如图所示: 1)APB1外设 2)APB2外设 3)AHB1外设 4)AHB2外设 5)AHB3外设 6)AHB4外设(ABH共享总线外设) 内存映射关系图:
- LeetCode NO477.汉明距离总和
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量. 计算一个数组中,任意两个数之间汉明距离的总和. 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中,4表示为010 ...
- Hadoop_03_Hadoop分布式集群搭建
一:Hadoop集群简介: Hadoop 集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起: HDFS集群:负责海量数据的存储,集群中的角色主要有: NameNo ...
- 使用metamask钱包
一.安装火狐浏览器metamask插件 打开火狐浏览器的附件组件,搜索metamask 点击第一个 点击“添加到Firefox” 添加成功后,浏览器右上角有一个狐狸标志 点击这个标志,打开插件 二.创 ...
- Redis05——Redis高级运用(管道连接,发布订阅,布隆过滤器)
Redis高级运用 一.管道连接redis(一次发送多个命令,节省往返时间) 1.安装nc yum install nc -y 2.通过nc连接redis nc localhost 6379 3.通过 ...
- python+Appium自动化:运行第一个appium脚本
用pycharm工具进行编写,运行一个开启淘宝app实例 from appium import webdriver desired_caps = { "platformName": ...
- 集合(五) TreeMap
4.TreeMap SortedMap接口继承Map接口,是排序键值对的接口,实现排序的的方法是Comparator.而NavigableMap接口继承于SortedMap,新增了一些导航方法.而Tr ...
- Zabbix Server安装指南
监控模板网站 在https://share.zabbix.com/,提供了各种各样的监控模板,可以自行搜索,套用.
- 记录weblogic12c通用版本在windowsXP上安装报异常的问题:java.lang.NoClassDefFoundError:
先上图: 这个可能有经验的人一眼就看出问题了,报这个错的原因是:我把安装包放在了中文目录下,本来以为安装包放在中文目录下无关紧要,但是weblogic12c就是这么神奇,不能放在中文目录下. 解决方法 ...