Andriod PackageManager使用

jia635發表於2014-08-13
1.獲取系統應用程式列表
Android系統提供了很多服務管理類,包括ActivityManager,PowerManager,AudioManager,PackageManager

PackageManager的功能:
.安裝,解除安裝應用
.查詢Permission相關資訊
.查詢Aplication相關資訊(application,activity,receiver,service,provider及相應屬性等)
.查詢已經安裝的應用
.清除使用者資料,快取,程式碼段等
.顯示系統安裝的應用程式列表或者系統程式列表

相關類的介紹:
PackageItemInfo
說明:androidManifest.xml檔案中所有節點的基類。提供了這些節點的基本資訊:label,icon,meta -data,他並不是直接使用的,而是由子類繼承然後呼叫相應的方法
常用欄位:
public int icon:獲取該資源圖片在R檔案的值(對應於android:icon屬性)
public int label:獲取該label對應R檔案的值(對應於android:label屬性)
public String name:獲取該節點的name(對應於android:name屬性)
public String packagename:獲取該應用程式包名(對應於android:packageName屬性)

常用方法:
Drawabel loadIcon(PackaManager pm):獲取當前應用程式的影象
CharSequence loadLabel(PackageManager pm):獲取當前應用程式的label

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

3.ServiceInfo類
說明:同ActivityInfo類似,同樣的繼承自PackageItemInfo,只不過它表示是<service>節點資訊

4.ApplicationInfo類:
繼承自PackageItemInfo
說明:獲取一個特定應用程式中<application>節點的
欄位說明:
flags欄位:FLAG_SYSTEM 系統應用程式
FLAG_EXTERNAL_STORAGE 表示該應用安裝在sdcard中
常用的方法繼承至:packageItemInfo類中的LoadIcon()和loadLabel()

5.ResolveInfo類:
說明:根據<Intent>節點來獲取上一層目錄的資訊,通常是<activity>,<receiver>,<service>節點資訊。
常用欄位:
public ActivityInfo activiInfo獲取activityInfo物件,即<activity>或<receiver>節點資訊
public ServiceInfo  serviceInfo 獲取ServiceInfo物件,即<activity>節點資訊

常用方法:
Drawabel loadIcon(PackaManager pm):獲取當前應用程式的影象
CharSequence loadLabel(PackageManager pm):獲取當前應用程式的label

6.PackageInfo類
說明:獲取AndroidManifest.xml欄位資訊
常用欄位資訊:
public String packageName
public ActivityInfo[]activities
public ApplicationInfo applicationInfo
public ActivityInfo[]receiver
public ServiceInfo[]services

7.PackageManager
說明:獲取系統安裝的程式
可以通過:getPackageManager() 方法獲取
常用的方法:
public abstract PackageManager getPackageManager()
public abstract Drawable getApplicationIcon(String packageName)
public abstract  ApplicationInfo getApplicationInfo(String packageName,int flags)
public abstract List<ApplicationInfo>getInstalledApplication(int flags)
方法說明:flags一般是進行過濾使用的,flages一般:GET_UNINSTALLED_PACKAGE,那麼返回所以的ApplicationInfo.我們可以通過ApplicationInfo的flags過濾,得到我們需要的
public abstract List<PackageInfo>getInstalledPackage(int flags)

public abstract ResolveInfo resolverActivity(Intent intent,int flags)
引數:Intent查詢條件,Activity所配置的action和category flags:MATCH_DEFAULT_ONLY,category:必須帶有CATEGORY_DEFAULT的Activity,才匹配GET_INTENT_FILTER:匹配Intent條件即可,GET_RESOLVED_FILTER:匹配Intent條件即可 
功能:返回給定條件的ResolverInfo物件(本質上是Activity)
public abstract List<ResolveInfo>queryIntentActivities(Intent intent,int flags)
功能:返回給定條件的所有ResolveInfo物件(本質上是Activity),集合物件

public abstract ResolveInfo resolveService(Intent intent,int flags)
功能:返回給定條件的ResolveInfo物件(本質上是Service)

public abstract List<ResolveInfo>queryIntentServices(Intent intent,int flags)
功能:返回給定條件的所有ResolveInfo物件(本質上是Service),集合物件

 List<PackageInfo> packs = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); 
        Intent intent=new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        
        List<ResolveInfo>resolveInfos=(List<ResolveInfo>) pm.queryIntentActivities(intent, PackageManager.GET_UNINSTALLED_PACKAGES);
        for(ResolveInfo info:resolveInfos){
         HashMap<String, Object> map = new HashMap<String, Object>();  
         map.put("icon",info.loadIcon(pm));
         map.put("appName",info.loadLabel(pm));
         map.put("packageName",info.activityInfo.packageName);
         items.add(map);
        }

相關文章