獲取未安裝的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
private void openAPK(String packagename)
{
PackageManager packageManager = mContext.getPackageManager();
Intent intent=new Intent();
intent =packageManager.getLaunchIntentForPackage(packagename);
mContext.startActivity(intent);
} 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!