Android之获取packageinfo相关
2021-01-10 本文已影响0人
Lee_5566

根据PackageInfo对象获取APP信息
PackageInfo类包含AndroidManifest.xml文件的信息。
常用字段 | 含义 |
---|---|
String packageName | 包名 |
ActivityInfo[] activities | 所有<activity>节点信息 |
ApplicationInfo applicationInfo | <application>节点信息,只有一个 |
ActivityInfo[] receivers | 所有<receiver>节点信息,多个 |
ServiceInfo[] services | 所有<service>节点信息 ,多个 |
获取APP信息方式:
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
// APP 包名
String packageName = packageInfo.packageName;
// APP icon
Drawable icon = packageManager.getApplicationIcon(applicationInfo);
// APP 名称
String appName = packageManager.getApplicationLabel(applicationInfo).toString();
// APP 权限
String[] permissions = packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions;
ApplicationInfo类
ApplicationInfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0;用于保存应用的标志信息。
ApplicationInfo 可以得到一个应用基本信息。这些信息是从AndroidManifest.xml的< application >标签获取的
ApplicationInfo对象里保存的信息都是<application>标签里的属性值
ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。后者只能得到Icon、Label
字段说明 | 含义 |
---|---|
flags字段 | - |
FLAG_SYSTEM | 系统应用程序 |
FLAG_EXTERNAL_STORAGE | 表示该应用安装在sdcard中 |
获取手机上安装所有程序对应的 ApplicationInfo
/**
* 获取手机上安装的所有的程序对应的 ApplicationInfo
* 它是通过解析AndroidManifest.xml的< application>标签中得到的,所以它能得到所有的app
*
* 获取手机上的所有的安装的应用程序信息
* 参数为 标识 一般为 PackageManager.GET_UNINSTALLED_PACKAGES
*/
List<ApplicationInfo> list = packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
获取指定包名对应的 ApplicationInfo
/**
* 获取指定应用程序 ApplicationInfo
* 参数一对应应用程序的包名
* 参数二 应用程序对应的标识 通常为 0
*/
ApplicationInfo applicationInfo =
packageManager.getApplicationInfo("com.androidlongs.contactsapplication", 0);
ResolveInfo类
ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。它部分地对应于从AndroidManifest.xml的< intent>标签收集到的信息。
常用字段 | 含义 |
---|---|
ActivityInfo activityInfo | 获取 ActivityInfo对象,即<activity>或<receiver>节点信息 |
ServiceInfo serviceInfo | 获取 ServiceInfo对象,即<service>节点信息 |
根据ResolveInfo对象获取APP信息:
// APP包名
resolve.activityInfo.packageName;
// APP icon
resolve.loadIcon(packageManager);
// APP名称
resolve.loadLabel(packageManager).toString();