Android PackageManager 詳解


PackageManager是用於獲取Android系統中應用程序的信息,查詢Application相關信息(application,activity,receiver,service,provider及相應屬性等)、查詢已安裝應用、增加或刪除permission、清除用戶數據、緩存,代碼段等。AnroidManifest.xml文件節點說明:


AndroidManifest.xml文件中所有節點的基類,提供了這些節點的基本信息:a label、icon、meta-data。它並不直接使用,而是由子類繼承然后調用相應方法。
PackageItemInfo類:

Field Detail
public int icon 獲得該資源圖片在R文件中的值 (對應於android:icon屬性)
public int labelRes 獲得該label在R文件中的值(對應於android:label屬性)
public String name 獲得該節點的name值 (對應於android:name屬性)
public String packagename 獲得該應用程序的包名 (對應於android:packagename屬性)

 

        



Method Detail
Drawable loadIcon(PackageManager pm) 獲得當前應用程序的圖像
CharSequence  loadLabel(PackageManager pm) 獲得當前應用程序的label

 

 

 

 

ActivityInfo/ServiceInfo extends PackageItemInfo

獲得應用程序中<activity/>或者<receiver/>節點的信息。我們可以通過它來獲取我們設置的任何屬性,包括theme 、launchMode、launchmode等。常用方法繼承至PackageInfo類中的loadIcon()和loadLabel();

ApplicationInfo extends PackageItemInfo

獲取一個特定應用程序中<application>節點的信息
FLAG_SYSTEM-->系統應用程序
FLAG_EXTERNAL_STORAGE-->表示該應用安裝在sdcard中
常用方法繼承至PackageItemInfo類中的loadIcon()和loadLabel();

ResolveInfo 

根據<intent>節點來獲取其上一層目錄的信息,通常是<activity>、<receiver>、<service>節點信息。
public ActivityInfo activityInfo     獲取 ActivityInfo對象,即<activity>或<receiver>節點信息
public ServiceInfo serviceInfo     獲取 ServiceInfo對象,即<service>節點信息

Drawable loadIcon(PackageManager pm)             獲得當前應用程序的圖像
CharSequence loadLabel(PackageManager pm)     獲得當前應用程序的label

PackageInfo

Field Detail
public String packageName 應用程序包名
public ActivityInfo[] activities   所有<activity>節點信息
public ApplicationInfo applicationInfo <application>節點信息,only one
public ActivityInfo[] receivers 所有<receiver>節點信息,many
 public ServiceInfo[] services  所有<service>節點信息 ,many

 

 

 

 

 


PackageManager 

獲得已安裝的應用程序信息 。可以通過context.getPackageManager()方法獲得。

Method Detail
public Drawable getApplicationIcon(String packageName) 根據PackageName獲取應用程序Icon,有重載方法
public ApplicationInfo getApplicationInfo(String packageName, int flags) 根據PackageName獲取ApplicationInfo,flags:該ApplicationInfo是此flags標記,通常可以直接賦予常數0即可
public List<ApplicationInfo> getInstalledApplications(int flags) flag為一般為GET_UNINSTALLED_PACKAGES,那么此時會返回所有ApplicationInfo。我們可以對ApplicationInfo的flags過濾,得到我們需要的
public ResolveInfo resolveActivity(Intent intent, int flags)

intent 查詢條件,Activity所配置的action和category
flags:MATCH_DEFAULT_ONLY:Category必須帶有CATEGORY_DEFAULT的Activity;GET_INTENT_FILTERS:匹配Intent條件即可;GET_RESOLVED_FILTER:匹配Intent條件即可;(本質上是Activity).

public ResolveInfo  resolveService(Intent intent, int flags)

參數同上,返回給定條件的ResolveInfo對象(本質上是Service)

public List<ResolveInfo>  queryIntentActivities(Intent intent, int flags)

參數同上,返回給定條件的所有ResolveInfo對象(本質上是Activity)集合對象

public List<ResolveInfo> queryIntentServices(Intent intent, int flags)

參數同上,返回給定條件的所有ResolveInfo對象(本質上是Service)集合對象

Drawable getActivityIcon(ComponentName cn) 獲取組件名稱對應的Activity的Icon
Drawable getActivityIcon(Intent intent) 獲取Intent對應的Icon
XMLResourceParse getXml(String packageName,int resid,ApplicationInfo ai) 從指定的包中加載某個xml文件

 

PackageManager還可以獲取安裝包的大小信息,包括緩存大小(cachesize)、數據大小(datasize)、應用程序大小(codesize)
關於安裝包得大小信息封裝在PackageStats類中

Field Detail
public long cachesize  緩存大小
public long codesize 應用程序大小
public long datasize 數據大小
public String packageName 應用包名

 

        

應用程序總大小=cachesize + codesize + datasize


    // 列出普通應用程序
    private void loadApps() {
        customApps = new ArrayList<PackageInfo>(); // 普通應用程序列表
        systemApps = new ArrayList<PackageInfo>(); // 系統應用程序列表 // 得到PackageManager對象
        PackageManager pm = this.getPackageManager();
        // 得到系統安裝的所有程序包的PackageInfo對象
        List<PackageInfo> packages = pm.getInstalledPackages(0);
        for (PackageInfo pi : packages) {
            // 列出普通應用
            if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
                customApps.add(pi);
            }
            // 列出系統應用,總是感覺這里設計的有問題,希望高手指點
            if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) {
                systemApps.add(pi);
            }
        }
    }

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM