【Android】獲取手機中已安裝apk文件信息(PackageInfo、ResolveInfo)(應用圖片、應用 ...

衆所周知,通過PackageManager可以獲取手機端已安裝的apk文件的信息,具體代碼如下:

  1. PackageManager packageManager = this.getPackageManager(); 
  2. List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);  

 

  1. /** 
  2.  * 查詢手機內非系統應用 
  3.  * @param context 
  4.  * @return 
  5.  */ 
  6. public static List<PackageInfo> getAllApps(Context context) { 
  7. List<PackageInfo> apps = new ArrayList<PackageInfo>(); 
  8. PackageManager pManager = context.getPackageManager(); 
  9. //獲取手機內所有應用 
  10. List<PackageInfo> paklist = pManager.getInstalledPackages(0); 
  11. for (int i = 0; i < paklist.size(); i++) { 
  12. PackageInfo pak = (PackageInfo) paklist.get(i); 
  13. //判斷是否爲非系統預裝的應用程序 
  14. if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) { 
  15. // customs applications 
  16. apps.add(pak); 
  17. return apps; 
  18. 獲取圖片、應用名、包名: 
  19.                     PackageManager pManager = MessageSendActivity.this.getPackageManager(); 
  20.                     List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this); 
  21.                     for(int i=0;i<appList.size();i++) { 
  22.                     PackageInfo pinfo = appList.get(i); 
  23.                     ShareItemInfo shareItem = new ShareItemInfo(); 
  24.                     //set Icon 
  25.                     shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo)); 
  26.                     //set Application Name 
  27.                     shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString()); 
  28.                     //set Package Name 
  29.                     shareItem.setPackageName(pinfo.applicationInfo.packageName); 
  30.                     }  

獲取支持分享的應用的代碼:

  1. /** 
  2.  * 查詢手機內所有支持分享的應用 
  3.  * @param context 
  4.  * @return 
  5.  */ 
  6. public static List<ResolveInfo> getShareApps(Context context){ 
  7.     List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();  
  8.     Intent intent=new Intent(Intent.ACTION_SEND,null);  
  9.     intent.addCategory(Intent.CATEGORY_DEFAULT);  
  10.     intent.setType("text/plain");  
  11.     PackageManager pManager = context.getPackageManager(); 
  12.     mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);  
  13.     return mApps;  
  14. //由於該方法,返回的並不是 PackageInfo 對象。而是 ResolveInfo。因此獲取圖片、應用名、包名的方法不一樣,如下: 
  15.                     PackageManager pManager = MessageSendActivity.this.getPackageManager(); 
  16.                     /*********************查詢手機內所有支持分享的應用*********************/ 
  17.                     List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this); 
  18.                     for(int i=0;i<resolveList.size();i++) { 
  19.                     ResolveInfo resolve = resolveList.get(i); 
  20.                     ShareItemInfo shareItem = new ShareItemInfo(); 
  21.                     //set Icon 
  22.                     shareItem.setIcon(resolve.loadIcon(pManager)); 
  23.                     //set Application Name 
  24.                     shareItem.setLabel(resolve.loadLabel(pManager).toString()); 
  25.                     //set Package Name 
  26.                     shareItem.setPackageName(resolve.activityInfo.packageName); 
  27.                     }  

總結:
通過 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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章