關於PackageInfo、ApplicationInfo、ActivityInfo、ResolveInfo四種資訊類的區別之我見
PackageInfo:
獲得方法:
- PackageManager packageManager = context.getPackageManager();//返回packagemanager例項來找到全球包裝資訊(來自百度翻譯)
- List<PackageInfo> allPackageInfos = packageManager
- .getInstalledPackages(packageManager.GET_UNINSTALLED_PACKAGES
-
| 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:
獲得方法:
- List<PackageInfo> sysPackageInfos = new ArrayList<PackageInfo>();// 定義系統安裝軟體資訊包
- for (PackageInfo packageInfo : allPackageInfos)// 迴圈取出所有軟體資訊
- {
- ApplicationInfo applicationInfo = packageInfo.applicationInfo;// 得到每個軟體資訊
- }
特點:
ApplicationInfo是從一個特定的應用得到的資訊。這些資訊是從相對應的Androdimanifest.xml的< application>標籤中收集到的。
ApplicationInfo類 繼承自 PackageItemInfo
說明:獲取一個特定引用程式中<application>節點的資訊。
欄位說明:
flags欄位: FLAG_SYSTEM 系統應用程式
FLAG_EXTERNAL_STORAGE 表示該應用安裝在sdcard中
常用方法繼承至PackageItemInfo類中的loadIcon()和loadLabel()
ResolveInfo:
獲得方法:
- Intent startIntent = new Intent(Intent.ACTION_MAIN, null);//為本startIntent設定行為為ACTION_MAIN
- startIntent.addCategory(Intent.CATEGORY_LAUNCHER);//為本startIntent設定啟動方式為LAUNCHER
- startIntent.setPackage(packageInfo.getPkgName());//為本startIntent設定包名為packageInfo.getPkgName()
- //以startIntent為查詢條件查詢出需要啟動的App的資訊
- //功能 :返回給定條件的所有ResolveInfo物件(本質上是Activity),集合物件
- List<ResolveInfo> startInfoList = SoftManagementActivity.this
- .getPackageManager().queryIntentActivities(startIntent, 0);
- //如果startInfoList的長度小於1,則返回
- if (startInfoList.size() < 1)
- {
- return;
- }
- //startInfoList中一般第一條就是啟程App的資訊
- 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:
獲得方法:
- ActivityInfo activityInfo = startInfo.activityInfo;
特點:
ActivityInfo類 繼承自 PackageItemInfo
說明: 獲得應用程式中<activity/>或者 <receiver />節點的資訊 。我們可以通過它來獲取我們設定的任何屬性,包括
theme 、launchMode、launchmode等
常用方法繼承至PackageItemInfo類中的loadIcon()和loadLabel()