未安裝apk檔案資訊獲取
阿新 • • 發佈:2018-11-07
一、獲取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); }