适配Android8.0无法弹出覆盖安装界面
2018-07-09 本文已影响111人
haegyeong
记录一下做版本更新时候无法弹出覆盖安装界面,测试用Android8.0以下的系统是可以覆盖安装成功的,所以证明6.0的动态权限和7.0的文件读取权限是没问题的,后来google一下,发现8.0添加了新的安全措施,不允许应用内安装未经过Google play验证的应用,所以我们又得针对8.0系统做适配。
- 在清单文件中添加如下权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
- 判断是否已经获取到允许安装未知应用
在8.0中的PackageManager类中多了 canRequestPackageInstalls() 这个方法来检查是否已经获取到允许安装未知应用,所以我们在代码中只需要通过调用packageManager.canRequestPackageInstalls()
返回的boolean值来判断是否能进行下一步安装,伪代码如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean canInstall = getPackageManager().canRequestPackageInstalls();
if (canInstall) {
installApk();
} else {
//请求安装未知应用来源的权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 0);
}
} else {
installApk();
}
- 引导用户跳转到 安装未知应用 界面
如果用户是首次更新,则canRequestPackageInstalls()默认返回false,所以我们要引导用户跳转到 安装未知应用 界面
startActivity(Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES))
进过如上步骤,那么版本更新就可以在8.0系统上完美的运行了,比较少写文章,表述可能不太好,如有疑问可私聊。喜欢的点个赞。