1. 程式人生 > >Android 6.0系統手機升級應用時無法升級的問題

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;
}