内容简介:我们可以通过PackageManager获取PackageInfo,既而获得应用包相关的各种信息,除了之前说过的可以获取包名、版本号、图标、入口Activity、Application、文件md5/sha1/sha256等等,我们还可以获取应用的四大组件列表,以及组件具体详情。获取PackageInfo要注意flags参数,否则获取不到相应信息。其中,对于组件来说,有两个字段我最关心:
我们可以通过PackageManager获取PackageInfo,既而获得应用包相关的各种信息,除了之前说过的可以获取包名、版本号、图标、入口Activity、Application、文件md5/sha1/sha256等等,我们还可以获取应用的四大组件列表,以及组件具体详情。
PackageInfo info = pm.getPackageInfo(mPackageName, PackageManager.GET_ACTIVITIES
| PackageManager.GET_RECEIVERS
| PackageManager.GET_SERVICES
| PackageManager.GET_PROVIDERS
| PackageManager.GET_INTENT_FILTERS
| PackageManager.GET_META_DATA
| PackageManager.GET_DISABLED_COMPONENTS);
获取PackageInfo要注意flags参数,否则获取不到相应信息。
info.activities; //activity列表, ActivityInfo[]类型 info.receivers; //broadcast receiver列表 ActivityInfo[]类型 info.services; //service列表, ServiceInfo[]类型 info.activities; //provider列表, ProviderInfo[]类型
其中,对于组件来说,有两个字段我最关心:
info.exported; info.enabled;
自此,我们做一个显示应用的四大组件列表功能所需的一切就都齐了。
截图来自 android开发 工具 箱, 点我下载 android开发工具箱
组件详情就比较麻烦了,因为四大组件的属性都不一样,而且由于android版本不同,字段也有所区别。下面只拿Activity举例。
有一些字段我们是可以直接从ActivityInfo获取的,比如
info.enabled; info.exported; info.processName; info.permission; info.parentActivityName;
有一些字段,我们需要做一下映射,比如launchMode。info.launchMode是int类型
public class ActivityInfo extends ComponentInfo implements Parcelable {
public static final int LAUNCH_MULTIPLE = 0;
public static final int LAUNCH_SINGLE_TOP = 1;
public static final int LAUNCH_SINGLE_TASK = 2;
public static final int LAUNCH_SINGLE_INSTANCE = 3;
}
除了launchMode之外,colorMode、screenOrientation、uiOptions等等也是需要进行类似的转换的。
如果不想写很多的switch-case之类的代码,也可以使用反射。比如launchMode,我们可以将`ActivityInfo`类中,所有静态且以LAUNCH_开头的常量一一遍历,与info.launchMode值相同的话,我们显示field.getName()即可。
还有一种情况,比如softInputMode、configChanges等字段,是多种类型的组合,我们也一样可以使用反射。以configChanges为例:
public static final int CONFIG_MCC = 0x0001; public static final int CONFIG_MNC = 0x0002; public static final int CONFIG_LOCALE = 0x0004; ...
只是我们不能使用相等来作为判断条件了,需要做个位运算:
if ((flags & fieldValue) == fieldValue) {
//满足条件,field.getName()
}
除此之外,还有一个特殊一点的theme,通过PackageInfo,我们只能拿到themeId,我们知道,想要获取theme名字,可以通过如下方式:
resources.getResourceName(themeId); //或者 resources.getResourceEntryName(themeId);
需要注意的是,我们不能使用自己的Resources对象来获取其他应用的主题信息,我们需要拿到对应应用的Resources
context.getPackageManager().getResourcesForApplication(packageName);
这样,我们就拿到Activity相关的所有信息。另外三个组件也类似,不再一一演示。
截图来自 android开发工具箱, 点我下载 android开发工具箱
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- React 穿透获取被高级组件装饰的目标组件实例
- React16.8中父组件获取子组件数据的3中方式
- vue组件props传值,对象获取不到的问题
- 设计稿生成代码核心技术揭秘:获取图片中前端组件的位置信息
- UWeb v1.5.4 专业版发布,完善字典组件,实现动态获取
- UWeb v1.6.2 专业版发布,增强框架字典组件,根据标识动态获取数据源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Compilers
Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman / Addison Wesley / 2006-9-10 / USD 186.80
This book provides the foundation for understanding the theory and pracitce of compilers. Revised and updated, it reflects the current state of compilation. Every chapter has been completely revised ......一起来看看 《Compilers》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
HEX CMYK 转换工具
HEX CMYK 互转工具