Androidプログラム情報取得
3882 ワード
プログラム情報がAndroidmanifestに格納されていることを知っています.xmlファイル
SDKは、AndroidmanifestからなるPackageInfoクラスを提供する.xmlファイルで収集されたすべての情報.
PackageInfoソースの表示
PackageInfoのサブクラスApplicationInfoにパッケージされています.プログラム名プログラムアイコンなどの情報はどのようにこれらの情報を取得しますか?ApplicationInfoソースの表示
ApplicationInfoはPackageItemInfoクラスを継承します.PackageItemInfoソースの表示
PackageInfoクラスにプログラム情報がカプセル化されていることが分かった.PackageInfoオブジェクトの取得方法SDKはパッケージ管理クラスPackageManagerを提供し、PackageInfoオブジェクトの取得を担当します.PackageManagerソースの表示
プログラムのサイズを取得するには、別の文章に移動して、プログラムのサイズを詳しく説明してください.
具体的には、この文章は詳しく説明しない.どのクラスでオブジェクトインスタンスを取得できるかを追跡する必要があります.ソースコードを表示します.ContextWrapperクラスでPackageManagerオブジェクトを取得する関数を提供します.
ContextWrapperクラスのサブクラス
開発では、次の2つの状況に遭遇します.1パケット名を知る、そのプログラムの情報 を取得する.2インストールプログラム情報 を取得する.
パッケージ管理クラスPackageManagerの取得
パッケージ管理オブジェクト取得プログラム情報
PackageInfoオブジェクトを取得し、タスクが完了したら、目的のデータを取得しましょう.
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つの状況に遭遇します.
パッケージ管理クラス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オブジェクトを取得し、タスクが完了したら、目的のデータを取得しましょう.