1. 程式人生 > >關於PackageInfo、ApplicationInfo、ActivityInfo、ResolveInfo四種資訊類的區別之我見

關於PackageInfo、ApplicationInfo、ActivityInfo、ResolveInfo四種資訊類的區別之我見

PackageInfo:

獲得方法:

  1. PackageManager packageManager = context.getPackageManager();//返回packagemanager例項來找到全球包裝資訊(來自百度翻譯)
  2.         List<PackageInfo> allPackageInfos = packageManager  
  3.                 .getInstalledPackages(packageManager.GET_UNINSTALLED_PACKAGES  
  4.                         | packageManager.GET_ACTIVITIES);// 初始化時先要得到當前的所有程序
特點:

常用欄位:
           public String    packageName                   包名
           public ActivityInfo[]     activities                   所有<activity>節點資訊
           public ApplicationInfo applicationInfo       <application>節點資訊,只有一個
           public ActivityInfo[]    receivers                  所有<receiver>節點資訊,多個


           public ServiceInfo[]    services                  所有<service>節點資訊 ,多個

通過 PackageInfo  獲取具體資訊方法:
包名獲取方法:packageInfo.packageName
icon獲取獲取方法:packageManager.getApplicationIcon(applicationInfo)
應用名稱獲取方法:packageManager.getApplicationLabel(applicationInfo)
使用許可權獲取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions

ApplicationInfo:

獲得方法:

  1. List<PackageInfo> sysPackageInfos = new ArrayList<PackageInfo>();// 定義系統安裝軟體資訊包
  2.         for (PackageInfo packageInfo : allPackageInfos)// 迴圈取出所有軟體資訊
  3.         {  
  4.             ApplicationInfo applicationInfo = packageInfo.applicationInfo;// 得到每個軟體資訊
  5.         }  

特點:

ApplicationInfo是從一個特定的應用得到的資訊。這些資訊是從相對應的Androdimanifest.xml的< application>標籤中收集到的。
ApplicationInfo類 繼承自  PackageItemInfo
         說明:獲取一個特定引用程式中<application>節點的資訊。
         欄位說明:
      flags欄位: FLAG_SYSTEM 系統應用程式
                   FLAG_EXTERNAL_STORAGE 表示該應用安裝在sdcard中
         常用方法繼承至PackageItemInfo類中的loadIcon()和loadLabel()

ResolveInfo:

獲得方法:

  1. Intent startIntent = new Intent(Intent.ACTION_MAIN, null);//為本startIntent設定行為為ACTION_MAIN
  2.         startIntent.addCategory(Intent.CATEGORY_LAUNCHER);//為本startIntent設定啟動方式為LAUNCHER
  3.         startIntent.setPackage(packageInfo.getPkgName());//為本startIntent設定包名為packageInfo.getPkgName()
  4.         //以startIntent為查詢條件查詢出需要啟動的App的資訊
  5.         //功能 :返回給定條件的所有ResolveInfo物件(本質上是Activity),集合物件
  6.         List<ResolveInfo> startInfoList = SoftManagementActivity.this
  7.                 .getPackageManager().queryIntentActivities(startIntent, 0);  
  8.         //如果startInfoList的長度小於1,則返回
  9.         if (startInfoList.size() < 1)  
  10.         {  
  11.             return;  
  12.         }  
  13.         //startInfoList中一般第一條就是啟程App的資訊
  14.         ResolveInfo startInfo = startInfoList.iterator().next();  
特點:

ResolveInfo這個類是通過解析一個與IntentFilter相對應的intent得到的資訊。它部分地對應於從AndroidManifest.xml的< intent>標籤收集到的資訊。

ResolveInfo類        說明:根據<intent>節點來獲取其上一層目錄的資訊,通常是<activity>、<receiver>、<service>節點資訊。       常用欄位:             public  ActivityInfo  activityInfo     獲取 ActivityInfo物件,即<activity>或<receiver >節點資訊             public ServiceInfo   serviceInfo     獲取 ServiceInfo物件,即<activity>節點資訊       常用方法:              Drawable loadIcon(PackageManager pm)             獲得當前應用程式的影象             CharSequence loadLabel(PackageManager pm)  獲得當前應用程式的label

通過 ResolveInfo 獲取具體資訊方法:包名獲取方法:resolve.activityInfo.packageNameicon獲取獲取方法:resolve.loadIcon(packageManager)應用名稱獲取方法:resolve.loadLabel(packageManager).toString()

ActivityInfo:

獲得方法:

  1. ActivityInfo activityInfo = startInfo.activityInfo;  

特點:

ActivityInfo類  繼承自 PackageItemInfo
          說明: 獲得應用程式中<activity/>或者 <receiver />節點的資訊 。我們可以通過它來獲取我們設定的任何屬性,包括
      theme 、launchMode、launchmode等
             常用方法繼承至PackageItemInfo類中的loadIcon()和loadLabel()