【转】PackageInfo、ResolveInfo 笔记

时间:2024-04-30 11:10:44
1.PackageInfo、ResolveInfo

PackageItemInfo:包含了一些信息的基类,

它的直接子类有:

ApplicationInfo、 ComponentInfo、InstrumentationInfo、PermissionGroupInfo、PermissionInfo。

   它的间接子类有:

ActivityInfo、ProviderInfo、ServiceInfo。这个类包含的信息对于所有包中项目是平等的。这些Package items是被Package manager所持有的。

【转】PackageInfo、ResolveInfo 笔记

这个类提供了属性:label、icon和meta-data。这个类的意图不是被自己调用。它只是简单分享被PackageManager返回的所有items之间的普通定义。比如,它自己并不实现Parcelable接口,但却帮助实现了Parcelable的子类ResolveInfo提供了方便的方法。

ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的AndrodiManifest.xml的<application>标签中收集到的。
  ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。它部分地对应于从AndroidManifest.xml的<intent>标签收集到的信息。

 

    PackageManager这个类是用来返回各种的关联了当前已装入设备了的应用的包的信息。你可以通过getPacageManager来得到这个类。
  ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。后者只能得到Icon、Label。

 

   具体应用实例:

   通过调用PackageManager的方法可以得到两种不同的信息:
  PackageManager packageManager = getPackageManager();

  List<ApplicationInfo> applicationList =packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);

它是通过解析AndroidManifest.xml<application>标签中得到的,所以它能得到所有的app。

  Intent intent = new Intent(Intent.ACTION_MAIN, null);


  intent.addCategory(Intent.CATEGORY_LAUNCHER);

//通过Intent查找相关的Activity,更准确
  List<ResolveInfo> resolveList = packageManager.queryIntentActivities(intent, 0);


  //它是通过解析<Intent-filter>标签得到
  <action Android:name=”android.intent.action.MAIN”/>
  <action android:name=”android.intent.category.LAUNCHER”/>

 

    一句话吧:

通过 PackageInfo 获取具体信息方法:

包名获取方法:packageInfo.packageName
    icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
    应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
    使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions

通过 ResolveInfo 获取具体信息方法:

包名获取方法:resolve.activityInfo.packageName
    icon获取获取方法:resolve.loadIcon(packageManager)
    应用名称获取方法:resolve.loadLabel(packageManager).toString()

  1. // 获取应用程序下所有Activity
  2. public static ArrayList<String> getActivities(Context ctx) {
  3. ArrayList<String> result = new ArrayList<String>();
  4. Intent intent = new Intent(Intent.ACTION_MAIN, null);
  5. intent.setPackage(ctx.getPackageName());
  6. for (ResolveInfo info : ctx.getPackageManager().queryIntentActivities(intent, 0)) {
  7. result.add(info.activityInfo.name);
  8. }
  9. return result;
  10. }