今天和小伙伴聊到关于8.0版本应用更新权限的问题,8.0没有得到未知应用的安装权限是不能安装的,但是,我在oppo8.0上测试的结果却表明,没有设置此权限,依然能安装上,但是中间会增加个关于对未知应用安装的提示,所以这部分确实不是所有机型都是一样的,对于8.0的安装,代码给各位大佬们附上。
/**
* 下载完成后自动跳到安装界面
* download_path 为默认安装路径
* @param context
*/
public static void installApk(String versionName, Context context) {
if (TextUtils.isEmpty(versionName)) {
return;
}
File file = new File(Environment.getExternalStorageDirectory(), DOWNLOAD_PATH + "/" + versionName);
///medcare-doctor.apk
Intent mintent = new Intent();
mintent.setAction(Intent.ACTION_VIEW);
mintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String type = getMIMEType(file, context);
//判断版本是否在7.0以上
if (Build.VERSION.SDK_INT >= 24) {
//provider authorities
//Granting Temporary Permissions to a URI
Uri data = FileProvider.getUriForFile(context, "你的应用包名.fileProvider", file);
mintent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
mintent.setDataAndType(data, type);
}else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
if (!hasInstallPermission) {
ToastUtil.makeText(MyApplication.getContext(), MyApplication.getContext().getString(R.string.string_install_unknow_apk_note), false);
startInstallPermissionSettingActivity();
return;
}
Uri data = FileProvider.getUriForFile(context, "你的应用包名.fileProvider", file);
mintent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
mintent.setDataAndType(data, type);
}else {
mintent.setDataAndType(Uri.fromFile(file), type);
}
context.startActivity(mintent);
}
/**
* 解析apk安装包,如若不能解析,用户则手动选择安装包
*
* @param f
* @param context
* @return
*/
private static String getMIMEType(File f, Context context) {
String type = "";
String filename = f.getName();
String endname = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
if (endname.equals("apk")) {
type = "application/vnd.android.package-archive";
} else {
type = "*/*";
Toast.makeText(context, "解析包错误,请手动选择安装包进行安装...", Toast.LENGTH_SHORT).show();
}
return type;
}
/**
* 跳转到设置-允许安装未知来源-页面
*/
@RequiresApi(api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity() {
//注意这个是8.0新API
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
除此之外,你还需要配置7.0以上就需要配置的fileProvider,这个可以参考其他资料。
感谢一只懂音乐的码虫的博客,附上链接:
https://blog.csdn.net/zj_blog/article/details/79897241?tdsourcetag=s_pctim_aiomsg