zoukankan      html  css  js  c++  java
  • 【转】PackageInfo、ResolveInfo 笔记

    1.PackageInfo、ResolveInfo

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

        它的直接子类有:

          ApplicationInfo、 ComponentInfo、InstrumentationInfo、PermissionGroupInfo、PermissionInfo。

       它的间接子类有:

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

        

        这个类提供了属性: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()

        

    [java] view plain copy
     
     print?在CODE上查看代码片派生到我的代码片
    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.   }  
  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/qianyukun/p/5457842.html
Copyright © 2011-2022 走看看