獲取未安裝的APK圖標、版本、包名、名稱、是否安裝、安裝、打開

jopen 9年前發布 | 40K 次閱讀 Android Android開發 移動開發


一、獲取APK圖標

通常讀取APK的圖標可以用,PackageManager里面的getApplicationIcon(ApplicationInfo)來得到一個drawable。但實際使用的時候經常只能得到一個默認的圖標,根本不是APK的圖標。

參考小米開源文件管理器,結合實踐,代碼如下:

/*
     * 采用了新的辦法獲取APK圖標,之前的失敗是因為android中存在的一個BUG,通過
     * appInfo.publicSourceDir = apkPath;來修正這個問題,詳情參見:
     * http://code.google.com/p/android/issues/detail?id=9151
     */
    public static Drawable getApkIcon(Context context, String apkPath) {
        PackageManager pm = context.getPackageManager();
        PackageInfo info = pm.getPackageArchiveInfo(apkPath,
                PackageManager.GET_ACTIVITIES);
        if (info != null) {
            ApplicationInfo appInfo = info.applicationInfo;
            appInfo.sourceDir = apkPath;
            appInfo.publicSourceDir = apkPath;
            try {
                return appInfo.loadIcon(pm);
            } catch (OutOfMemoryError e) {
                Log.e("ApkIconLoader", e.toString());
            }
        }
        return null;
    }

以下代碼段中PackageManager、PackageInfo、ApplicationInfo均同上面一致。

二、獲取APK名稱

String label = appInfo.loadLabel(mPackManager).toString();

 

三、獲取APK包名

String packageName = appInfo.packageName;

 

四、獲取APK版本

String version = info.versionName==null?"0":info.versionName

五、判斷APK是否安裝

private boolean isApkInstalled(String packagename)
      {
        PackageManager localPackageManager = getPackageManager();
        try
        {
          PackageInfo localPackageInfo = localPackageManager.getPackageInfo(packagename, PackageManager.GET_UNINSTALLED_PACKAGES);
          return true;
        }
        catch (PackageManager.NameNotFoundException localNameNotFoundException)
        {
         return false;
        }

      }

 

六、安裝APK

 private void installAPK(String apkPath)
     {
         Intent intent = new Intent();
         intent.setAction(Intent.ACTION_VIEW);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setDataAndType(Uri.parse("file://" + apkPath),
                    "application/vnd.android.package-archive");
         mContext.startActivity(intent);
     }

七、打開APK

 private void openAPK(String packagename)
     {
           PackageManager packageManager = mContext.getPackageManager(); 
           Intent intent=new Intent(); 
           intent =packageManager.getLaunchIntentForPackage(packagename); 
           mContext.startActivity(intent);
     }

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!