关于 Android(安卓)8.0 安装 APK 权限问题
16lz
2021-01-26
项目中在做App应用内更新的时候,发现Android8.0以上的手机下载安装包之后,闪屏一下,无法启动安装页面进行安装。
通过查阅资料发现,大多数潜在有害应用都来源于第三方平台,Android引入 Google Play 保护机制,保护用户设备免受侵害。在 Android 8.0 中,安装未知应用权限提高了安装未知来源应用时的安全性。此权限与其他运行时权限一样,会与应用绑定,在安装时进行提示,确保用户授予使用安装来源的权限后,此权限才会提示用户安装应用。在运行 Android 8.0 或更高版本的设备上使用此权限时,恶意下载程序将无法骗取用户安装未获得预先授权的应用。
如果你想要安装某个被自己所信任的开发者的 app,则需要在每一次都手动授予“安装未知应用”权限的许可。
首先在清单文件中添加未知应用的权限:
其次就是正常的申请敏感权限:
第一种效果图:每次都去授权安装
/** * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装 */ private fun checkIsAndroidO() { if (Build.VERSION.SDK_INT >= 26) {//8.0 //来判断应用是否有权限安装apk val installAllowed = packageManager.canRequestPackageInstalls() //有权限 if (installAllowed) { //安装apk } else { //无权限 申请权限 ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.REQUEST_INSTALL_PACKAGES), INSTALL_APK_REQUESTCODE) } } else {//8.0以下 //安装apk } }
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) when (requestCode) { INSTALL_APK_REQUESTCODE -> { //安装apk } } }
第二种效果图:直接跳转到“未知权限页面”进行授权安装
@RequiresApi(Build.VERSION_CODES.O) override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) when (requestCode) { INSTALL_APK_REQUESTCODE -> { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //安装apk } else { val packageURI = Uri.parse("package:$packageName")//设置包名,可直接跳转当前软件的设置页面 val intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI) startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES) } } } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode) { GET_UNKNOWN_APP_SOURCES -> { checkIsAndroidO() } } }
更多相关文章
- iOS自动化测试(一)-技术方案、环境配置与疯狂踩坑
- Android(安卓)版本更新下载自动安装APK,并解决Android6.0安装失败
- 也谈Android下一个apk安装多个程序入口图标
- 给android studio安装新字体,如mac系统的monaco字体
- Android实现电话拨号器和短信发送器
- Android(安卓)Q(10.0)版本新特性和兼容性适配
- 移动互联网和Android给你带来的机会[轉]
- Android(安卓)Studio打不开,无法启动,无反应的解决方案
- Android学习系列(3)--App自动更新之自定义进度视图和内部存储