PackageInfoノート[ネットワーク整理]
3481 ワード
PackageItemInfoは、いくつかの情報のベースクラスを含んでいます.
直接サブクラスは次のとおりです.
ApplicationInfo、 ComponentInfo、InstrumentationInfo、PermissionGroupInfo、PermissionInfo.
間接サブクラスは次のとおりです.
ActivityInfo、ProviderInfo、ServiceInfo.
このクラスに含まれる情報は、すべてのパッケージ内のアイテムに対して平等です.これらのPackage itemsはPackage managerによって所有されている.
PackageManagerというクラスは、現在マウントされているアプリケーションに関連付けられた様々なパッケージの情報を返すために使用されます.このクラスはgetPacageManagerで入手できます.
PackageManager manager = getPackageManager();// manager
ApplicationInfoは、特定のアプリケーションから得られる情報です.これらの情報は対応するAndrodimanifestです.xmlの<アプリケーション>タブで収集されました.
List< ApplicationInfo> appList = manager.getInstalledApplications
ResolveInfoというクラスはIntentFilterに対応するintentを解析することによって得られた情報である.
AndroidManifestからのxmlの
Intent intent = new Intent(Intent.A CTION_MAIN,null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// Intent Activity,
List< ResolveInfo> appList = manager.queryIntentActivities(intent,0);
eg:
ResolveInfo resolve = appList.get(i);
resolve.activityInfo.packageName//
resolve.loadIcon(packageManager)//icon
resolve.loadLabel(packageManager).toString()//
[注]:
< action android:name=”android.intent.action.MAIN”/>
< action android:name=”android.intent.category.LAUNCHER”/>
このようなappは、第1の方法よりも少ない(前者はそれよりもサービス、previderなどのappが多い).
[*]ApplicationInfoとResolveInfoを比較すると、前者はIcon、Label、meta-data、descriptionが得られる.
後者はIcon、Labelしか得られない.
[コード例]
1.PackageManagerで、携帯端末にインストールされているapkファイルの情報を入手できます.
PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);
以上の方法により、手動でインストールしたapkパッケージの情報も含めて、携帯電話にインストールされているすべてのアプリケーションを得ることができます.
システムにプリインストールされたアプリケーションソフトウェアの情報も含まれています.この2つのソフトウェアを区別するには、次の方法を使用します.
a.packageInfoListから取得するpackageInfoは、packageInfoを経由する.アプリケーションInfoはアプリケーションInfoを取得します.
b.判定(アプリケーションInfo.flags&ApplicationInfo.FLAG_SYSTEM)の値が0より大きい場合は、取得すべき
システムにプリインストールされたアプリケーションとして使用し、逆に手動でインストールされたアプリケーションとして使用します.
//
public static List<PackageInfo> getAllApps(Context context) {
List<PackageInfo> apps = new ArrayList<PackageInfo>();
PackageManager pManager = context.getPackageManager();
//
List<PackageInfo> paklist = pManager.getInstalledPackages(0);
for (int i = 0; i < paklist.size(); i++) {
PackageInfo pak = (PackageInfo) paklist.get(i);
// icon:pManager.getApplicationIcon(pak.applicationInfo);
// :pManager.getApplicationLabel(pak.applicationInfo).toString());
// :pak.applicationInfo.packageName;
//
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
// customs applications
apps.add(pak);
}
}
return apps;
}