文章目录

  • PackageManager
    • 介绍
    • 获取
  • PackageInfo
  • ApplicationInfo
    • 获取ApplicationInfo
    • 通过ApplicationInfo来获取应用程序的基本信息
  • ActivityInfo

PackageManager

介绍

有些场景下,我们会需要获取一些其它 App 的各项信息,例如:App 名称,包名、Icon 等。这个时候就需要使用到 PackageManager 这个类了

你首先需要获取 PackageManager(以下简称 PM) 对象,通过 PM 对象,你就可以获取到你需要的各项 App 的信息类

这里涉及到的 App 信息类包括:PackageInfo、ApplicationInfo、ActivityInfo/ServiceInfo/ProviderInfo 等,还有一个 ResolveInfo 类,它比较特殊一点,不和前面的结构为从属关系

这些类,都可以在根据 AndroidManifest.xml 中定义的组件进行划分,大概的结构如下

获取

在 Context 中,就有获取 PM 对象的方法,getPackageManager(),所以四大组件想要获取它是非常简单的

PM 中,提供了非常多的方法,供我们通过不同的条件,获取到 PackageInfo 对象、ApplicationInfo 对象等

PackageInfo

PackageInfo 从名称上也可以看出来,它主要用于存储获取到的 Package 的一些信息,包括:包名(packageName)、版本号(versionCode)、版本名(versionName)

基本上拿到了 PackageInfo ,你就可以拿到大部分此 Apk 相关的信息了。并且,PackageInfo 中有一个 applicationInfo 的字段,是可以直接获取到与它相关的 ApplicationInfo 对象的

这里介绍几个 PackageInfo 中,比较常用的字段:

  • packageName:包名
  • versionCode:版本号
  • versionName:版本名
  • firstInstallTime:首次安装时间
  • lastUpdateTime:最后一次覆盖安装时间
PackageManager packageManager = getPackageManager();PackageInfo packageInfo = null;try {packageInfo = packageManager.getPackageInfo(getPackageName(), 0);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}int labelRes = packageInfo.applicationInfo.labelRes;String app_name = getResources().getString(labelRes);String packageName = packageInfo.packageName;int versionCode = packageInfo.versionCode;String versionName = packageInfo.versionName;long firstInstallTime = packageInfo.firstInstallTime;long lastUpdateTime = packageInfo.lastUpdateTime;textView.setText("appName:"+app_name+"\n"+"packageName:"+packageName+"\n " +"versionCode:"+versionCode+"\n versionName:"+versionName+"\n firstInstallTime:"+date(firstInstallTime)+"\n lastUpdateTime:"+date(lastUpdateTime));private String date(long time){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(time);return sdf.format(date);}

ApplicationInfo

ApplicationInfo 相对于 PackageInfo 用的会比较少一些。它主要用于获取 Apk 定义在 AndroidManifest.xml 中的一些信息。这些信息是从AndroidManifest.xml的<application>标签获取的,ApplicationInfo对象里保存的信息都是<application>标签里的属性值

这里介绍几个比价常用的:

  • packageName:包名
  • targetSdkVersion:目标 SDK 版本
  • minSdkVersion:最小支持 SDK 版本,有 Api 限制,最低在 Api Level 24 及以上支持
  • sourceDir:App 的 Apk 源文件存放的目录
  • dataDir:data 目录的全路径
  • metaData:Manifest 中定义的 meta 标签数据
  • uid:当前 App 分配的 uid

获取ApplicationInfo

我们可以获取手机上安装的所有程序对应的 ApplicationInfo,也可以获得指定包名的ApplicationInfo,代码如下:

/**
*获取手机上安装的所有的程序对应的 ApplicationInfo
* 它是通过解析AndroidManifest.xml的< application>标签中得到的,所以它能得到所有的app
*/
List<ApplicationInfo> list = getPackageManager().getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);/**
*获取指定包名的 ApplicationInfo
*/
ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo("com.xx.xx", 0);

通过ApplicationInfo来获取应用程序的基本信息

//获取应用图标
Drawable drawable = applicationInfo.loadIcon(packageManager);//获取应用程序的 包名
String appPackageName = applicationInfo.packageName;//获取应用名
//参数 packageManager  是应用管理者对象
String appName =applicationInfo.loadLabel(packageManager).toString();//当我们想在程序debug时打印log,反则不打印log的时候 就需要获取这个debug属性了,可用如下方法获取是否为debug模式
boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE));
<meta-dataandroid:name="app_name"android:value="弹窗Demo" />//<application/>标签下metadata获取
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
Bundle metadata = applicationInfo.metaData;//然后通过改bundle获取相应值
metadata.getString("app_name);

ActivityInfo

ActivityInfo、ServiceInfo、ProviderInfo 这三个是平级的,熟悉的一眼就能看出来,它们就是 Android 定义的四大组件中的几个。各自涵盖了一部分信息。一般在外部获取其他 App 的信息的时候,不会获取到这么细致的数据,如果有,看看这几个类准没错

参考:
通过 PackageManager 获得你想要的 App 信息

通过PackageManager、PackageInfo、ApplicationInfo、ActivityInfo获得你想要的 App 信息相关推荐

  1. app信息:PackageInfo+ApplicationInfo+ActivityInfo/ServiceInfo/ProviderInfo+PermissionInfo+...

    ApplicationInfo + ComponentInfo + InstrumentationInfo + PermissionGroupInfo + PermissionInfo /       ...

  2. 朱丹老师课程学习笔记:1、信息搜索-全面快速查找全网中你想要的任何信息

    在这个信息量爆炸.知识量剧增的时代,我们都有这样的体会,用搜索引擎搜索任何的关键词都会有上百万的信息量,而其中对我们有价值的信息却是寥寥无几.但我们每个人的时间和经历都是有限的,在这种情况下,如果想要 ...

  3. HTML 渲染组件出错,这个问题可以通过安装某个缺失组件来解决。您是否想要了解详细信息? 的解决办法

    问题概述 最近喜欢上了一款文本编辑软件 " Markdownpad 2 " ,非常好用,是一款用起来后无法自拔的!呃 ! 好吧! Markdownpad 2  安装程序的下载备份地 ...

  4. 02 资源搜索-全面、快速查找全网你想要的任何信息、情报

    02 资源搜索-全面.快速查找全网你想要的任何信息.情报 1.资源搜索心法 口诀:遇到资源问题,先百度,再淘宝,不行问知乎! 实际操作:搜索引擎-->付费渠道-->专家咨询 示例1 想搜索 ...

  5. 想开发手机APP软件,首先要弄清楚以下10点

    当今互联网时代,手机app软件开发已经成为时代的潮流,企业想开发自己的专属手机软件APP,却不知道怎么去和手机软件开发公司谈合作,更不知道一款手机APP开发需要经历哪些流程,因此,达不到各取所需的成效 ...

  6. 可以任意安装想要的app 欧盟Android装置用户可自由选择

    Google周四公布从未来几周内正式实作,让欧盟的Android装置用户可以自由选择安装Google 搜寻及Chrome浏览器以外的产品. 文章转自:sbf胜博站 去年7月欧盟针对Google以强迫A ...

  7. windows防火墙设置_想偷窥我的电脑隐私信息?这款隐私保护软件对Windows系统说“No Way”...

    乐享软件基地 关注我们,发现更多精彩 关注 众所周知,Windows系统目前是世界上应用范围最广和装机数量最多的电脑操作系统.经过这么多年的发展,Windows系统操作稳定,功能强大,支持众多软件,已 ...

  8. 十九. 想快速开发app,需要找外包吗?

    健生干货分享:第19篇 摘要:最近和两位准备开发app的创业者聊天,他们之前没有移动互联网的相关经验,有的是想法和资金.他们在纠结:想快速开发app,需要找外包吗? 最近和两位想开发app的创业者聊天 ...

  9. android 获取 第三方应用,​android PackageManager的使用如何获取第三方应用程序(包)的信息,求大神指点...

    我只写出了系统的应用程序(包)的信息,第三方的没有出来,怎么办,求解 public class MainActivity extends Activity { List appInfos; @Over ...

  10. Python爬取百度指数搜索结果,查看你想了解的热点信息吧

    今天无意间搜索问题的时候跳转到了百度指数这里,索性就打开来看看,下面是首页截图: 这里你可以自己输入自己想要查询的人物.事件等等,anything,只要是你感兴趣的都可以,有一种感觉就是你认为是热点的 ...

最新文章

  1. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
  2. java实验报告二_Java实验报告(实验二)
  3. SourceChangeWarning:验证集上准确率很高,但是测试集上很低
  4. MATLAB:图像半色调技术简介
  5. 小菜的CLR之旅(1)
  6. 指尖上的艺术——如何运用代码发挥无限创意
  7. java 线程 spring_java中spring里实现多线程
  8. Ubuntu下安装Git以及Git帮助手册【转】
  9. 史玉柱:创业不是靠忽悠,我的最后四个忠告
  10. windows跳转端口
  11. python摄像头动作捕捉_为动作捕捉设备写MOTIONBUILDER插件
  12. Sql Server 02
  13. java物流实时跟踪
  14. 《花开半夏》--9 远去
  15. MYSQL相比于其他数据库有哪些特点?
  16. CSS3精选内容通俗易懂
  17. 命令行模式下运行js文件
  18. 团队程序设计天梯赛考点内容总结(15分以上题)
  19. 第九章第一题(Rectangle类)(Rectangle class)
  20. Java实现——华容道数字小游戏

热门文章

  1. JavaScript格式化日期和时间
  2. iOS之性能优化·内置图片瘦身
  3. 商务统计_6 用图表演示数据 - 定性数据
  4. Donet.HighCharts
  5. 微信扫一扫打印照片的原理以及实现过程(持续更新中)
  6. 基于ROS的仿人机器人运动规划与实现
  7. 电子元器件简介——电容与电感篇
  8. 软件开发,网站建设,性价比高的PLC仿真软件。
  9. 反爬虫破解——百度翻译
  10. 一个计算机系统配置有3台打印机,我们是局域网3站点 3台电脑共享一个打印机 3台电脑相同的系统 打印参数也设置完全一样 但是打印出来的效果却不同 请问什么原因?需要怎么设置?...