【Android】携帯電話にインストールされているapkファイル情報(PackageInfo、ResolveInfo)(アプリケーション画像、アプリケーション名、パッケージ名など)を取得する


ご存知のように、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より大きい場合は、取得したアプリケーションがシステムプリインストールのアプリケーションであり、逆に手動インストールのアプリケーションであることを示す.
コードを見て、説明はコメントに書かれています.
アプリケーションのコードを取得するには、次の手順に従います.

    /**
     *           
     * @param context
     * @return
     */
    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);
            //               
            if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
                // customs applications
                apps.add(pak);
            }
        }
        return apps;
    }

画像、アプリケーション名、パッケージ名を取得します.

                        PackageManager pManager = MessageSendActivity.this.getPackageManager();
                        List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);
                        
                        for(int i=0;i<appList.size();i++) {
                            PackageInfo pinfo = appList.get(i);
                            ShareItemInfo shareItem = new ShareItemInfo();
                            //set Icon
                            shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
                            //set Application Name
                            shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
                            //set Package Name 
                            shareItem.setPackageName(pinfo.applicationInfo.packageName);
                            
                        }

ShareItemInfoクラスはローカルでカスタマイズされていますので、無視してください.
また、共有アプリのリストを探している人もいるかもしれませんが、ここで一緒に話しましょう.
共有をサポートするアプリケーションのコードを取得します.
    /**
     *               
     * @param context
     * @return
     */
    public static List<ResolveInfo> getShareApps(Context context){
        List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();  
        Intent intent=new Intent(Intent.ACTION_SEND,null);  
        intent.addCategory(Intent.CATEGORY_DEFAULT);  
        intent.setType("text/plain");  
        PackageManager pManager = context.getPackageManager();
        mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);  
        
        return mApps;  
    }

このメソッドのため、PackageInfoオブジェクトは返されません.ResolveInfoですしたがって、画像、アプリケーション名、パッケージ名を取得する方法は異なります.以下のようにします.

                        PackageManager pManager = MessageSendActivity.this.getPackageManager();
                        
                        /*********************              *********************/
                        List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this);
                        
                        for(int i=0;i<resolveList.size();i++) {
                            ResolveInfo resolve = resolveList.get(i);
                            ShareItemInfo shareItem = new ShareItemInfo();
                            //set Icon
                            shareItem.setIcon(resolve.loadIcon(pManager));
                            //set Application Name
                            shareItem.setLabel(resolve.loadLabel(pManager).toString());
                            //set Package Name 
                            shareItem.setPackageName(resolve.activityInfo.packageName);
                            
                        }

まとめ:
PackageInfoで詳細情報を取得する方法:
パッケージ名の取得方法:
packageInfo.packageName

icon取得方法:
packageManager.getApplicationIcon(applicationInfo)

アプリケーション名の取得方法:
packageManager.getApplicationLabel(applicationInfo)

アクセス権の取得方法を使用するには、次の手順に従います.
packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions

ResolveInfoによる詳細情報の取得方法:
パッケージ名の取得方法:
resolve.activityInfo.packageName

icon取得方法:
resolve.loadIcon(packageManager)

アプリケーション名の取得方法:
resolve.loadLabel(packageManager).toString()

転載:http://www.cnblogs.com/feng88724/archive/2011/02/21/1961222.html