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;
}