Andriod8.0 APK版本自动更新失败
前言
我们公司是大版本上应用市场,小版本上只是自己后台服务器,通过APK内部自动更新升级。这种情形下暴漏出了这次Bug,这边是公司大Boss拿着手机来找我们为什么版本升级不了?那边是各大应用市场一个新包没上,再加上ios那边新版本已经在使用了,真是到了进退两难的地步?尬尴的是第一时间还不知道是什么原因,算了不说了 直接上解决的详细方案吧!
事件原因
随着Android手机系统的不断升级,考虑到项目也要升级适应高版本的手机,然后就提升了项目的编译版本号,同时也将targetSdkVersion由22改成了26,就是自己这么不经意地一改就给自己埋下一个坑,正应了那句自己挖坑自己跳那句话。
结果就导致了只要是VERSION_CODE>22的安卓手机系统自动更新版本失败或者闪退。当时有人让我将targetSdkVersion改回22,但我觉得这不是最根本解决方法。
解决步骤
- 在清单文件里添加自动安装权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
- 在清单文件里自定义一个provider
- 安装APK手机系统大小代码判断
File apkfile = new File(saveFileName);
if (!apkfile.exists()) {
return;
}
Intent intent= new Intent(Intent.ACTION_VIEW);
Uri data;
// 判断版本大于等于7.0
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
data = FileProvider.getUriForFile(mContext, "自定义名称", apkfile); //自定义名就是manifest文件里<provider>的android:authorities="自定义名称"
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}else {
data = Uri.parse("file://" + apkfile.toString());
}
intent.setDataAndType(data, "application/vnd.android.package-archive");
mContext.startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- 总结
只有踩过的坑越多自己积累的经验才会越丰富,Android系统在升级相应地也要及时更新相应的权限。其实这个问题就是一个高版本权限配置的问题。不同版本获取不同的权限的存储路径。