Androidプログラム情報取得

3882 ワード

プログラム情報がAndroidmanifestに格納されていることを知っています.xmlファイル
SDKは、AndroidmanifestからなるPackageInfoクラスを提供する.xmlファイルで収集されたすべての情報.
PackageInfoソースの表示
//PackageInfo      ,       
public class PackageInfo implements Parcelable {

    //    
    public String packageName;

    //   
    public String versionName;

    //   
    public int versionCode;

    //    ID,                
    public String sharedUserId;

    //    ,           ,  ms
    public long firstInstallTime

    //      ,  ms,         APK    ,          
    public long lastUpdateTime

    //     
    public String[] requestedPermissions;

    //    ,   ,icon 
    public ApplicationInfo applicationInfo;

    //   Activity
    public ActivityInfo[] activities;

    //     
    public ActivityInfo[] receivers;

    //     
    public ServiceInfo[] services;

    //   Contentprovider
    public ProviderInfo[] providers;

}

PackageInfoのサブクラスApplicationInfoにパッケージされています.プログラム名プログラムアイコンなどの情報はどのようにこれらの情報を取得しますか?ApplicationInfoソースの表示
//ApplicationInfo      ,      ,       
public class ApplicationInfo extends PackageItemInfo implements Parcelable {
    //ApplicationInfo     
    public int flags = 0;

    //              ,      <

ApplicationInfoはPackageItemInfoクラスを継承します.PackageItemInfoソースの表示
//           PackageItemInfo  
public class PackageItemInfo {

    //      
    public CharSequence loadLabel(PackageManager pm);

    //      
    public Drawable loadIcon(PackageManager pm);

}


PackageInfoクラスにプログラム情報がカプセル化されていることが分かった.PackageInfoオブジェクトの取得方法SDKはパッケージ管理クラスPackageManagerを提供し、PackageInfoオブジェクトの取得を担当します.PackageManagerソースの表示
public abstract class PackageManager {//      

    /**        */
    //     :   ;     :       ( :GET_CONFIGURATIONS    )
    PackageInfo getPackageInfo(String packageName, int flags);

    //              
    List getInstalledPackages(int flags);

    //           ,           
    List getPackagesHoldingPermissions(String[] permissions,
     int flags);

    List getPreferredPackages(int flags);

    //      ,   @hide  ,          
    void getPackageSizeInfo(String packageName, IPackageStatsObserver observer);

}

プログラムのサイズを取得するには、別の文章に移動して、プログラムのサイズを詳しく説明してください.
具体的には、この文章は詳しく説明しない.どのクラスでオブジェクトインスタンスを取得できるかを追跡する必要があります.ソースコードを表示します.ContextWrapperクラスでPackageManagerオブジェクトを取得する関数を提供します.
//ContextWrapper  getPackageManager      PackageManager  
public class ContextWrapper extends Context {

    public PackageManager getPackageManager()  {   
          return mBase.getPackageManager();
    }
}

ContextWrapperクラスのサブクラス
//                     getPackageManager    PackageManager  

class Application extends ContextWrapper;

class ContextThemeWrapper extends ContextWrapper;

class Activity extends ContextThemeWrapper;

//Service    ,    Service  getPackageManager    PackageManager  

public abstract class Service extends ContextWrapper;

開発では、次の2つの状況に遭遇します.
  • 1パケット名を知る、そのプログラムの情報
  • を取得する.
  • 2インストールプログラム情報
  • を取得する.
    パッケージ管理クラスPackageManagerの取得
    // Application Activity Service       getPackageManager()    PackageManager
    PackageManager pm ;
    
     pm= Application.getPackageManager();
    
     pm = Activity.getPackageManager();
    
     pm = Service.getPackageManager();
    

    パッケージ管理オブジェクト取得プログラム情報
    //     ,       
    PackageInfo pi = pm.getPackageInfo(packageName,PackageManager.GET_CONFIGURATIONS);
    
    //            
    //PackageManager.GET_UNINSTALLED_PACKAGES              
    List apps;
    apps = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    

    PackageInfoオブジェクトを取得し、タスクが完了したら、目的のデータを取得しましょう.