Android PackageInfo 应用程序信息

1、简述

1 官方解析为  Overall information about the contents of a package.  This corresponds to all of the information collected from AndroidManifest.xml.获取应用程序所有的包信息,也包括从清单文件AndroidManifest.xml中获取的信息
2、获取PackageInfo
2.1 、获取手机上安装所有程序对应的 PackageInfo
//参数 0 是过滤信息 传入不同的数值,会获取不同的 应用程序信息 下面会具体分析
List<PackageInfo> installedPackageList = packageManager.getInstalledPackages(0);
2.2 、获取指定应用程序对应的 PackageInfo

//参数 appPackageName 是对应应用程序的 包名 可通过 ApplicationInfo来获取
PackageInfo packageInfo = packageManager.getPackageInfo(appPackageName, 0);

Android PackageManager Flags 包管理者信息说明

1、简述
1、获取包管理者 PackageManager packageManager = this.getPackageManager();
2、可以通过包管理者来获取packageInfo//获取手机上安装的所有应用程序的包信息List<PackageInfo> installedPackageList = packageManager.getInstalledPackages(0);//获取指定包名应用程序的包信息PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);3、上述在获取 PackageInfo时传入参数为 0,就是过滤条件在PackageManager中定义了多个过滤条件 ,传入的过滤条件不同,获取到的应用程序信息不同,例如上术传入的 过滤条件为 0 ,就是获取的 PackageInfo中 只包含 应用程序的版本信息(VersionCode,versionName)
2、PackageManager Flags概述
2.1 PackageManager.GET_ACTIVITIES

//源码解析 /*** {@link PackageInfo} flag: return information about* activities in the package in {@link PackageInfo#activities}.*/public static final int GET_ACTIVITIES              = 0x00000001;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_ACTIVITIES,那么我们获取的PackageInfo中就包含着 application标签下的所有的activity信息

//获取指定程序的application标签下的所有的activity
PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);ActivityInfo[] activities = packageInfo.activities;if (activities != null && activities.length != 0) {for (int i = 0; i < activities.length; i++) {Log.d("packageInfo -activities", "| " + activities[i]);}
}
2.2 PackageManager.GET_CONFIGURATIONS
/*** {@link PackageInfo} flag: return information about* hardware preferences in* {@link PackageInfo#configPreferences PackageInfo.configPreferences},* and requested features in {@link PackageInfo#reqFeatures} and* {@link PackageInfo#featureGroups}.*/public static final int GET_CONFIGURATIONS = 0x00004000;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_CONFIGURATIONS,那么我们获取清单文件中所所有的configurations 信息


List<PackageInfo> list6 = packageManager.getInstalledPackages(PackageManager.GET_CONFIGURATIONS);for (PackageInfo packageInfo : list6) {// 获取 清单文件中的所有的  Configuration 配制信息 ConfigurationInfo[] configPreferences = packageInfo.configPreferences;if (configPreferences != null) {for (int i = 0; i < configPreferences.length; i++) {ConfigurationInfo configPreference = configPreferences[i];Log.i("ConfigurationInfo-", "ConfigurationInfo: " + configPreference);}}
}
2.3 PackageManager.GET_CONFIGURATIONS
/*** {@link PackageInfo} flag: return the* {@link PackageInfo#gids group ids} that are associated with an* application.* This applies for any API returning a PackageInfo class, either* directly or nested inside of another.*/public static final int GET_GIDS                    = 0x00000100;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_GIDS,那么我们获取到应用程序所有的 gid信息


List<PackageInfo> list7 = packageManager.getInstalledPackages(PackageManager.GET_GIDS);if (list7 != null) {for (PackageInfo packageInfo : list7) {int[] gids = packageInfo.gids;if (gids != null && gids.length != 0) {for (int i = 0; i < gids.length; i++) {Log.i("packageInfo-", "gids:" + i + "=" + gids[i]);}}}}
2.4 PackageManager.GET_CONFIGURATIONS
    /*** {@link PackageInfo} flag: return information about* instrumentation in the package in* {@link PackageInfo#instrumentation}.*/public static final int GET_INSTRUMENTATION         = 0x00000010;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_INSTRUMENTATION,那么我们获取到应用程序所有的 清单中配制的所有的 Instrumentation 信息


List<PackageInfo> list8 = packageManager.getInstalledPackages(PackageManager.GET_INSTRUMENTATION);
if (list8 != null) {for (PackageInfo packageInfo : list8) {InstrumentationInfo[] instrumentation = packageInfo.instrumentation;if (instrumentation != null) {for (InstrumentationInfo instrumentationInfo : instrumentation) {Log.i("instrumentationInfo-", "instrumentationInfo " + instrumentationInfo);}}}
}
2.5 PackageManager.GET_INTENT_FILTERS
    /*** {@link PackageInfo} flag: return information about the* intent filters supported by the activity.*/public static final int GET_INTENT_FILTERS          = 0x00000020;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_INTENT_FILTERS,那么我们可以获取到清单文件下配制的activity 中的intent-filter 过滤条件信息

List<PackageInfo> list9 = packageManager.getInstalledPackages(PackageManager.GET_INTENT_FILTERS);
if (list9 != null) {for (PackageInfo packageInfo : list9) {FeatureInfo[] reqFeatures = packageInfo.reqFeatures;if (reqFeatures != null && reqFeatures.length != 0) {for (int i = 0; i < reqFeatures.length; i++) {Log.i("packageInfo-", "reqFeatures:" + i + "=" + reqFeatures[i]);}}}
}
2.6 PackageManager.GET_SIGNATURES
/*** {@link PackageInfo} flag: return information about the* signatures included in the package.*/
public static final int GET_SIGNATURES          = 0x00000040;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_SIGNATURES,那么我们可以获取到应用程序的签名信息

List<PackageInfo> list10 = packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);if (list10 != null) {for (PackageInfo packageInfo : list10) {Signature[] signatures = packageInfo.signatures;if (signatures != null && signatures.length != 0) {for (int i = 0; i < signatures.length; i++) {Log.i("packageInfo-", "signatures:" + i + "=" + signatures[i]);}}}
}
2.7 PackageManager.GET_META_DATA
/*** {@link ComponentInfo} flag: return the {@link ComponentInfo#metaData}* data {@link android.os.Bundle}s that are associated with a component.* This applies for any API returning a ComponentInfo subclass.*/
public static final int GET_META_DATA               = 0x00000080;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_META_DATA ,那么我们可以获取到应用程序的清单文件中配制的所有的 meta-data 标签信息

List<PackageInfo> list10 = packageManager.getInstalledPackages(PackageManager.GET_META_DATA);
2.8 PackageManager.GET_PERMISSIONS
/**
 * {@link PackageInfo} flag: return information about
 * permissions in the package in
 * {@link PackageInfo#permissions}.
 */
public static final int GET_PERMISSIONS               = 0x00001000;


也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_PERMISSIONS ,那么我们可以获取到应用程序的清单文件中配制的所有的 权限信息


List<PackageInfo> list10 = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
if (list10 != null) {for (PackageInfo packageInfo : list10) {String[] requestedPermissions = packageInfo.requestedPermissions;if (requestedPermissions != null && requestedPermissions.length != 0) {for (int i = 0; i < requestedPermissions.length; i++) {Log.i("packageInfo-", "requestedPermissions:" + i + "=" + requestedPermissions[i]);}}}
}
2.9 PackageManager.GET_PROVIDERS
/*** {@link PackageInfo} flag: return information about* content providers in the package in* {@link PackageInfo#providers}.*/
public static final int GET_PROVIDERS               = 0x00000008;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_PROVIDERS ,那么我们可以获取到应用程序的清单文件中配制的所有的 内容提供者

List<PackageInfo> list13 = packageManager.getInstalledPackages(PackageManager.GET_PROVIDERS);
if (list13 != null) {for (PackageInfo packageInfo : list13) {ProviderInfo[] providers = packageInfo.providers;if (providers != null) {for (ProviderInfo provider : providers) {}}}
}
2.10 PackageManager.GET_SERVICES
/*** {@link PackageInfo} flag: return information about* services in the package in {@link PackageInfo#services}.*/
public static final int GET_SERVICES                = 0x00000004;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_SERVICES ,那么我们可以获取到应用程序的清单文件中配制的所有的 服务

List<PackageInfo> installedPackageList2 = packageManager.getInstalledPackages(PackageManager.GET_SERVICES);
for (PackageInfo packageInfo : installedPackageList2) {// 获取 <application>标签下的所有services标签ServiceInfo[] services = packageInfo.services;if (services != null && services.length != 0) {for (int i = 0; i < services.length; i++) {Log.i("packageInfo-services", "services:" + i + "=" + services[i]);}}
}
2.11 PackageManager.GET_RECEIVERS
/*** {@link PackageInfo} flag: return information about* intent receivers in the package in* {@link PackageInfo#receivers}.*/
public static final int GET_RECEIVERS               = 0x00000002;

也就是当在获取PackageInfo时,传入的过滤条件为 PackageManager.GET_RECEIVERS ,那么我们可以获取到应用程序的清单文件中配制的所有的 广播接收者


List<PackageInfo> installedPackageList3 = packageManager.getInstalledPackages(PackageManager.GET_RECEIVERS);
for (PackageInfo packageInfo : installedPackageList3) {// 获取 <application>标签下的所有receive标签ActivityInfo[] receivers = packageInfo.receivers;if (receivers != null && receivers.length != 0) {for (int i = 0; i < receivers.length; i++) {Log.i("packageInfo-", "receivers:" + i + "=" + receivers[i]);}}
}
2.12 PackageManager.GET_SHARED_LIBRARY_FILES
/*** {@link ApplicationInfo} flag: return the* {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries}* that are associated with an application.* This applies for any API returning an ApplicationInfo class, either* directly or nested inside of another.*/
public static final int GET_SHARED_LIBRARY_FILES    = 0x00000400;

List<PackageInfo> list = packageManager.getInstalledPackages(PackageManager.GET_SHARED_LIBRARY_FILES);
2.13 PackageManager.GET_SHARED_LIBRARY_FILES
/*** {@link ApplicationInfo} flag: return the* {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries}* that are associated with an application.* This applies for any API returning an ApplicationInfo class, either* directly or nested inside of another.*/
public static final int GET_SHARED_LIBRARY_FILES    = 0x00000400;

List<PackageInfo> list = packageManager.getInstalledPackages(PackageManager.GET_SHARED_LIBRARY_FILES);

Android应用程序管理系列(四)—— packagemanager flags 与 packageInfo 相关推荐

  1. Android应用程序管理系列(二)——PackageManager 包管理者

    Android PackageManager 包管理者 1.简述 Android系统为我们提供了很多服务管理的类, 包括ActivityManager.PowerManager(电源管理).Audio ...

  2. Android应用程序管理系列(一)——管理对象封装概述

    1.PackageManager 包管理者 Android系统为我们提供了很多服务管理的类,包括ActivityManager.PowerManager(电源管理).AudioManager(音频管理 ...

  3. Android程序的几个组成部分,Android应用程序开发的四个重要组成部分

    51CTO为大家介绍过<Android SNK初探>,Android开发必须要了解构造块,Android应用程序是由四个重要组成部分组成的,这四种构造块如下: ◆Activity ◆Int ...

  4. 微信小程序开发系列四:微信小程序之控制器的初始化逻辑

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 这个教程的前两篇文章,介绍了如何 ...

  5. 微信小程序开发系列 (四) :微信小程序的页面跳转路由设计

    笔者由于工作需要,曾经参加过一个微信小程序同 SAP 系统集成的项目,因此从零开始学习了微信小程序的开发知识.这里通过系列文章把自己所学分享出来,希望对相关学习者有所帮助. 本教程前面三篇文章: 微信 ...

  6. Android P包管理机制之PackageManager简介

    1.PackageManager简介 与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能.PackageMana ...

  7. android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2

    前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...

  8. 密西西比河谷州立大学:Android应用程序开发(四)

    第四讲 网络数据获取和显示 转载于:https://www.cnblogs.com/qiuge227/p/3700143.html

  9. 《Android构建MVVM》系列(一) 之 MVVM架构快速入门

    前言 本文属于<Android构建MVVM>系列开篇,共六个篇章,详见目录树. 该系列文章旨在为Android的开发者入门MVVM架构,掌握其基本开发模式. 辅以讲解Android Arc ...

最新文章

  1. 将一个3 * 4的二维数组转换为4 * 3的二维数组
  2. js实现新闻滚动-单行滚动或者多行滚动
  3. cocos2d-x游戏实例(27)-简易动作游戏(5)
  4. 看完让你理解WebSocket原理
  5. 如何把python文件发给别人没_如何把自己写的python程序给别人用
  6. python绘制动态图表怎么存下来_做动态图表,没有数据?用Python就能获取!
  7. Manifold learning-based methods for analyzing single-cell RNA-sequencing data
  8. CSDN使用富文本编辑器为所发布的文章生成右侧目录
  9. centos7安装lnmp
  10. 3月7日 Maximum Subarray
  11. php编写程序计算积分_PHP论坛实现积分系统的思路代码详解
  12. ConstraintLayout使用汇总
  13. 深入浅出详解因子分析,附案例教学(全)
  14. word中 两页同时并排显示 与 单页显示 之间的切换
  15. 在macOS上运行bitcoin客户端
  16. 基于Python的电影数据可视化分析系统 设计报告+答辩PPT+项目源码
  17. 用ChatGPT处理word表格数据:直接采用ChatGPt和利用ChatGPT编写python脚本两种方法
  18. win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙
  19. 20162316刘诚昊 用链表实现队列
  20. Kali2022 系统语言怎么切换中文

热门文章

  1. CV Code | 计算机视觉开源周报20191002期
  2. mysql重做日志与binlog日志区别_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...
  3. java dateformat hh_SimpleDateFormat上的Java HH:mm和hh:mm之间的区别
  4. 收藏 | 机器学习、深度学习调参手册
  5. Matlab线性/非线性规划优化算法(3)
  6. 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1
  7. 进入hadoop_hadoop:伪分布模式参数配置指南
  8. 差分隐私 python_[宜配屋]听图阁
  9. for循环优化_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了
  10. python 财务分析-linux 复制移动命令详解