Android 6.0系統手機升級應用時無法升級的問題
這個問題已經困擾很久了,一直找不到突破口。一般情況下直接呼叫下面程式碼就可以直接升級 Intent intent = new Intent(Intent.ACTION_VIEW); File apk = new File(fileAbsolutePath); intent.setDataAndType(Uri.fromFile(apk),"application/vnd.android.package-archive"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClassName("com.android.packageinstaller","com.android.packageinstaller.PackageInstallerActivity"); context.startActivity(intent); 但是在Android 6.0系統上一直升級不了。現在修改的方法是直接通過下載的apk檔案的絕對路徑直接開啟apk檔案,讓系統自己去找相關的系統程式實現安裝 具體程式碼如下
public static void installAPK(Context context, String fileAbsolutePath) {
Logger.v(TAG, “installAPK fileAbsolutePath=” + fileAbsolutePath);
boolean integrity = checkApkIntegrity(context, fileAbsolutePath);
Logger.v(TAG, “checkApkIntegrity =” + integrity);
if (!integrity) {
File apk = new File(fileAbsolutePath);
if (apk.exists()) {
Logger.v(TAG, “checkApkIntegrity failed,delete the file”);
apk.delete();
}
return;
}
File apk = new File(fileAbsolutePath);
if (Build.VERSION.SDK_INT < 23) {
Intent intents = new Intent();
intents.setAction(“android.intent.action.VIEW”);
intents.addCategory(“android.intent.category.DEFAULT”);
intents.setType(“application/vnd.android.package-archive”);
intents.setData(Uri.fromFile(apk));
intents.setDataAndType(Uri.fromFile(apk),
“application/vnd.android.package-archive”);
intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intents);
} else {
File file = new File(fileAbsolutePath);
if (file.exists()) {
openFile(file, context);
}
}
} public static void openFile(File var0, Context var1) { Intent var2 = new Intent(); var2.addFlags(268435456); var2.setAction("android.intent.action.VIEW"); String var3 = getMIMEType(var0); var2.setDataAndType(Uri.fromFile(var0), var3); try { var1.startActivity(var2); } catch (Exception var5) { var5.printStackTrace(); Toast.makeText(var1, "沒有找到開啟此類檔案的程式", Toast.LENGTH_SHORT).show(); } } public static String getMIMEType(File var0) { String var1 = ""; String var2 = var0.getName(); String var3 = var2.substring(var2.lastIndexOf(".") + 1, var2.length()).toLowerCase(); var1 = MimeTypeMap.getSingleton().getMimeTypeFromExtension(var3); return var1; }