1. 程式人生 > >未安裝apk檔案資訊獲取

未安裝apk檔案資訊獲取

一、獲取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

</pre><pre name="code" class="java"> private void openAPK(String packagename)
   {
       PackageManager packageManager = mContext.getPackageManager(); 
       Intent intent=new Intent(); 
       intent =packageManager.getLaunchIntentForPackage(packagename); 
       mContext.startActivity(intent);
   }