Android 的应用管理主要是通过PackageManagerService来完成的。PackageManagerService服务负责各种APK包的安装、卸载、优化和查询。

PackageManagerService在启动时会扫描所有的APK文件和Jar包,然后把他们的信息读取出来,保存在内存中,这样系统在运行时就能迅速找到各种应用和组件的信息。扫描过程中如果遇到没有优化的文件,还要执行转换工作,将app文件从dex格式转换为oat格式(Android5.0之前是转换为odex格式)。

Android应用管理一 APK包的安装、卸载和优化
(PackageManagerService)

一、使用PackageManagerService

在应用中如果使用PackageManagerService服务,通常调用的是Context 的 getPackageManager() 方法,这个方法返回的是PackageManager对象。

二、PackageManager API

Class for retrieving various kinds of information related to the application packages that are currently installed on the device.

1. packageInfo

public abstract PackageInfo getPackageInfo(String packageName, int flags)根据包名获取对应的PackageInfo

PackageInfo packageInfo = packageManager.getPackageInfo(context.getApplicationInfo().packageName, 0);

PackageInfo用于描述mainfest中所有描述信息。
常见字段:
(1)public String packageName;包名
(2)public String[] splitNames;
(3)public int versionCode;版本号     
(4)public String versionName;版本名称
(5)public ApplicationInfo applicationInfo;
(6)public long firstInstallTime;第一次安装时间
(7)public long lastUpdateTime;上次更新时间
(8)public ActivityInfo[] activities;所有的Activity信息
(9)public ActivityInfo[] receivers; 所有的广播接收者
(10)public ServiceInfo[] services;所有的服务信息
(11)public ProviderInfo[] providers;获取ContentProvide
(12)public PermissionInfo[] permissions;所有的权限信息

2. applicationInfo

public abstract ApplicationInfo getApplicationInfo(String packageName,
int flags),根据指定的包名获取ApplicationInfo

ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getApplicationInfo().packageName, 0);

ApplicationInfo描述应用程序的基本信息
常见字段:
(1)public String taskAffinity;
(2)public String permission;
(3)public String processName;
(4)public String className;
(5)public int descriptionRes;
(6)public static final int FLAG_SYSTEM = 1<<0;系统应用
(7)public static final int FLAG_EXTERNAL_STORAGE = 1<<18;安装在外部存储卡
(8)public static final int FLAG_LARGE_HEAP = 1<<20;支持大内存

3. 其它诸如ActivityInfo、ServiceInfo都类似,他们都是继承自ComponentInfo类,唯一可以需要注意的就是各个类中的FLAG标签的含义。

4. For Instance

获得应用名称、版本名称、版本号

public ResultInfo getApplicationInfo(Context context) {PackageManager packageManager = context.getPackageManager();ApplicationInfo applicationInfo = null;PackageInfo packageInfo = null;try {applicationInfo = packageManager.getApplicationInfo(context.getApplicationInfo().packageName, 0);packageInfo = packageManager.getPackageInfo(context.getApplicationInfo().packageName, 0);} catch (final PackageManager.NameNotFoundException e) {}ResultInfo resultInfo = new ResultInfo();resultInfo.applicationName = packageManager.getApplicationLabel(applicationInfo).toString();//应用名称resultInfo.applicationVersionCode = packageInfo.versionCode;resultInfo.applicationVersionName = packageInfo.versionName;return resultInfo;}

Android 获取应用信息—PackageManager相关推荐

  1. Android获取通讯录信息

    Android获取通讯录信息 欢迎关注本人网站:rytter的私人博客网站 权限申请 自Android6.0以后,Android权限申请全部要求为动态申请(注:通讯录权限为危险权限),权限申请方法如下 ...

  2. I.MX6 android 获取framebuffer信息

    /********************************************************************************* I.MX6 android 获取f ...

  3. android获取电池信息;android获取电池容量、技术、电压、电量、温度等信息

    android获取电池信息:android获取电池容量.技术.电压.电量.温度等信息 1.这里我仅展示工具类,需要注意的是这里的部分值要刷新后才能显示,添加刷新UI的方法即可,而且电量温度等都是变化的 ...

  4. android获取GPU信息;android获取GPU渲染器、供应商、版本和扩展名等信息

    android获取GPU信息:android获取GPU渲染器.供应商.版本和扩展名等信息 效果: 1.布局文件 <?xml version="1.0" encoding=&q ...

  5. android 获取当前坐标,Android获取位置信息的方法

    本文实例为大家分享了Android获取位置信息的具体代码,供大家参考,具体内容如下 1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务 ...

  6. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  7. Android 获取ROM信息

    Android 获取rom信息没有统一的接口,需要事先知道配置文件中的对应的值 1.打开cmd窗口 2.输入adb shell 再输入getprop命令 3.得到配置信息 查找关于rom信息对应的键, ...

  8. Android 获取地理位置信息 封装好了 直接用

    前言:花了一个早上研究了以下android获取经纬度,然后网上的参考资料都是杂七杂八,基本上都是过去几年的,现在我用 android6.0参照别人的结果发生好多错误,我的内心几乎是崩溃的.后来,不断百 ...

  9. android获取签名信息

    android程序里面获取签名信息,常用于自校验,防止别人篡改您的APP. 其实就是获取package 信息. import android.app.Activity; import android. ...

  10. 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://2402766.blog.51cto.com/2392766/1080837 为了 ...

最新文章

  1. 已调信号波形是怎样的_【鼎阳硬件智库原创 | 测试测量】初识任意波形发生器...
  2. 压缩文件夹_怎样压缩文件夹并发送
  3. 定义一个栈(Stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构
  4. SQL2K数据库开发二十六之存储过程操作创建存储过程(一)
  5. 2020年最好用的手机是哪一款_2020年好评最多的三款手机,看看你在用哪款?
  6. PhoneUtils
  7. JS函数addEventListener的浏览器差异性封装
  8. cbc系统是指_制动EBD,CBC是什么意思?
  9. 吴恩达机器学习之逻辑回归理论部分
  10. R语言正则表达式[stringr package]
  11. 6Linux 终端命令格式
  12. 『科学计算_理论』矩阵求导
  13. 知网不能下载PDF?CAJ格式太鸡肋?
  14. 两独立样本率的非劣效性试验-样本量计算
  15. html特殊符号对照表
  16. 课程列表和整合阿里云视频点播
  17. LeetCode 37. 解数独 Sudoku Solver
  18. [激光原理与应用-26]:《激光原理与技术》-12- 激光产生技术-短脉冲、超短脉冲、调Q技术、锁模技术
  19. JAVA_HOME环境变量
  20. linux cat eof如何指定变量,Linux cat和EOF的使用

热门文章

  1. 利用YYLabel 进行图文混排+高度计算
  2. 技术研发团队管理计划方案书
  3. C语言面试题---数组
  4. java 字符串限制长度吗_[Java教程]限制字符串长度
  5. python怎么读取dat文件_小白也能学会系列:用python文件读写代码实例!(简单案例)...
  6. 【全源码及文档】基于JAVA的干部档案管理系统
  7. JavaScript设置视频播放速度
  8. 高等工程热力学复习01
  9. Xshell上传文件到Centos服务器
  10. 接口测试与接口性能测试总结