Android应用程序管理系列(四)—— packagemanager flags 与 packageInfo
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 相关推荐
- Android应用程序管理系列(二)——PackageManager 包管理者
Android PackageManager 包管理者 1.简述 Android系统为我们提供了很多服务管理的类, 包括ActivityManager.PowerManager(电源管理).Audio ...
- Android应用程序管理系列(一)——管理对象封装概述
1.PackageManager 包管理者 Android系统为我们提供了很多服务管理的类,包括ActivityManager.PowerManager(电源管理).AudioManager(音频管理 ...
- Android程序的几个组成部分,Android应用程序开发的四个重要组成部分
51CTO为大家介绍过<Android SNK初探>,Android开发必须要了解构造块,Android应用程序是由四个重要组成部分组成的,这四种构造块如下: ◆Activity ◆Int ...
- 微信小程序开发系列四:微信小程序之控制器的初始化逻辑
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 这个教程的前两篇文章,介绍了如何 ...
- 微信小程序开发系列 (四) :微信小程序的页面跳转路由设计
笔者由于工作需要,曾经参加过一个微信小程序同 SAP 系统集成的项目,因此从零开始学习了微信小程序的开发知识.这里通过系列文章把自己所学分享出来,希望对相关学习者有所帮助. 本教程前面三篇文章: 微信 ...
- Android P包管理机制之PackageManager简介
1.PackageManager简介 与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能.PackageMana ...
- android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2
前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...
- 密西西比河谷州立大学:Android应用程序开发(四)
第四讲 网络数据获取和显示 转载于:https://www.cnblogs.com/qiuge227/p/3700143.html
- 《Android构建MVVM》系列(一) 之 MVVM架构快速入门
前言 本文属于<Android构建MVVM>系列开篇,共六个篇章,详见目录树. 该系列文章旨在为Android的开发者入门MVVM架构,掌握其基本开发模式. 辅以讲解Android Arc ...
最新文章
- 将一个3 * 4的二维数组转换为4 * 3的二维数组
- js实现新闻滚动-单行滚动或者多行滚动
- cocos2d-x游戏实例(27)-简易动作游戏(5)
- 看完让你理解WebSocket原理
- 如何把python文件发给别人没_如何把自己写的python程序给别人用
- python绘制动态图表怎么存下来_做动态图表,没有数据?用Python就能获取!
- Manifold learning-based methods for analyzing single-cell RNA-sequencing data
- CSDN使用富文本编辑器为所发布的文章生成右侧目录
- centos7安装lnmp
- 3月7日 Maximum Subarray
- php编写程序计算积分_PHP论坛实现积分系统的思路代码详解
- ConstraintLayout使用汇总
- 深入浅出详解因子分析,附案例教学(全)
- word中 两页同时并排显示 与 单页显示 之间的切换
- 在macOS上运行bitcoin客户端
- 基于Python的电影数据可视化分析系统 设计报告+答辩PPT+项目源码
- 用ChatGPT处理word表格数据:直接采用ChatGPt和利用ChatGPT编写python脚本两种方法
- win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙
- 20162316刘诚昊 用链表实现队列
- Kali2022 系统语言怎么切换中文
热门文章
- CV Code | 计算机视觉开源周报20191002期
- mysql重做日志与binlog日志区别_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...
- java dateformat hh_SimpleDateFormat上的Java HH:mm和hh:mm之间的区别
- 收藏 | 机器学习、深度学习调参手册
- Matlab线性/非线性规划优化算法(3)
- 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1
- 进入hadoop_hadoop:伪分布模式参数配置指南
- 差分隐私 python_[宜配屋]听图阁
- for循环优化_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了
- python 财务分析-linux 复制移动命令详解