Android 11
APK下載位置兼容
Android5.0,Android5.1不支持?jǐn)帱c(diǎn)續(xù)傳且apk文件必須放到外置存儲(chǔ)卡(代碼安裝apk出現(xiàn)提示錯(cuò)誤:解析包時(shí)出現(xiàn)錯(cuò)誤),不能放在內(nèi)部存儲(chǔ)卡(Android7.0支持apk存放在內(nèi)部存儲(chǔ)卡)。
public void installApk(String path){
File apkfile = new File(path);
if (!apkfile.exists()) {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
//兼容7.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 加這個(gè),會(huì)導(dǎo)致升級(jí)后有多個(gè)任務(wù)棧的問題,先在startupactivity中處理了,后續(xù)再想辦法
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".fileprovider", apkfile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
//兼容8.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
if (!hasInstallPermission) {
YKToast.showToast(mContext, mContext.getString(R.string.str_install_unknow_apk_note), Toast.LENGTH_SHORT);
startInstallPermissionSettingActivity();
return;
}
}
} else {
String filePath = "file://" + apkfile.toString();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse(filePath),"application/vnd.android.package-archive");
}
mContext.startActivityForResult(intent, RequestCodes.INSTALL_APK_CODE);
}