android下载完成不能自动安装失败,android 8.0以上自动安装apk失败的解决问题
随着android 系统的不断更新和发展,针对应用的权限管理也是越来越严格。这可是坑坏了我们这些搬砖的程序员,因为在一些上架平台,都一一宣布,以后的android应用 targetSdkVersion 必须最小为26,也就是说应用是android 8.0。将targetSdkVersion提升到26后,也随之出现了很多问题。今天只是来说一下,android 8.0下载自动安装时碰见的不自动安装的问题。
android 8.0以后有了一个权限叫安装未知应用或者是安装未知来源应用,如图:
如果想让应用自动安装下载的新版本apk,那么必须打开应用的这个权限,不然是不会自动安装的。打开方式
private void checkInstall(){
boolean haveInstallPermission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//先获取是否有安装未知来源应用的权限
haveInstallPermission = getPackageManager().canRequestPackageInstalls();
if (!haveInstallPermission) {//没有权限
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setTitle("请开启未知来源权限")
.setMessage("应用需要打开安装未知来源应用权限,请去设置中开启权限")
.setCancelable(false)
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
ToastUtils.showToast(SplashActivity.this,"您拒绝了权限,应用无法正常使用!");
finish();
}
})
.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
toInStallPermissionSettingActivity();
}
}).create();
alertDialog.show();
return;
}
}
//有权限,进行安装操作 安装就不写了
installAPK();
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void toInStallPermissionSettingActivity() {
Uri packageURI = Uri.parse("package:" + getPackageName());
//注意这个是8.0新API
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, REQUEST_CODE_INSTALL_PERMISSION);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_INSTALL_PERMISSION) {
checkInstall();//以防万一,再次检查权限
}
}
这样就让用户把权限打开,就可以自动安装了。如果用户拒绝,那就关闭应用吧,不然不能正常更新版本,老板也会找你的,不如干脆点,直接关闭应用
android下载完成不能自动安装失败,android 8.0以上自动安装apk失败的解决问题相关推荐
- android 下载多个文件怎么打开,Android 下载一个资料以及打开这个apk文件
Android 下载一个文件以及打开这个apk文件 下载一个网络文件的函数如下 public static File downLoadFile(String httpUrl) { // TODO Au ...
- SUSE 11 安装sybase ASE 16.0 SP 02安装全过程
SUSE系统下安装Sybase数据库 参考文档: https://wiki.deepin.io/mediawiki/index.php?title=Sybase_%E5%AE%89%E8%A3%85% ...
- win8mysql安装教程zip_mysql 8.0.18.zip安装配置方法图文教程(windows 64位)
关于卸载以前安装版的数据库,大家可以参考一下这篇文章. 卸载前记住一定要记得复制保留以前的数据,安装版的数据是在 mysql5.7所有安装版本卸载教程,建议:大家卸载完一定要重启一下. 目录 1.先去 ...
- mysql8.0.17压缩包安装教程_mysql 8.0.16 压缩包安装配置方法图文教程
本文为大家分享了mysql 8.0.16 压缩包安装配置方法,供大家参考,具体内容如下 运行环境:windows 10 x64 1.下载zip安装包: mysql8.0 for windows zip ...
- mysql 8免安装图解_mysql 8.0.21免安装版配置方法图文教程
六步安装Mysql(免安装包的才可以选安装位置),供大家参考,具体内容如下 第一步:下载MySQL压缩包 mysql下载路径 直接点击链接也可以下载:mysql 8.0.21 第二步:解压到自己想要安 ...
- CentOS下安装Oracle 11.2.0.4(静默安装)
这里不使用图形用户界面安装数据库,使用的是静默安装. 操作系统版本:CentOS release 6.5 (Final) 打算安装一个实例名为orcl的Oracle. 1. 检查硬件要求 1.1 内存 ...
- mysql 8.0 手动安装教程_mysql 8.0.13手动安装教程
本文为大家分享了mysql 8.0.13手动安装教程,供大家参考,具体内容如下 一.步骤解读 1.下载MySQL 下载地址 选择 Downloads-->Community-->MySQL ...
- hadoop2.9.2安装hadoop_pid_dir_Hadoop3.2 +Spark3.0全分布式安装
目前Apache官网已经推出了最新版的Haoop3.2和最新版的Spark3.0,比原来增加了很多新特性.Hadoop的安装主要是为Spark提供HDFS的支持和yarn的调度.那么我们将在本文介绍全 ...
- thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析
本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类 ...
- android下载歌词代码,比较完整的android MP3 LRC歌词滚动高亮显示(附源码)
1.以前的滚动只是安行来刷新,现在不是按行来滚动了,其实就是在一定时间内整体往上移动,比如说在1S内刷新10次,由于认得肉眼看起来像是滚动. 关键代码如下: float plus = currentD ...
最新文章
- 径向基函数插值(2)一维数据的插值
- javaSE各阶段练习题--流程控制2
- Python自动化开发学习13-联合唯一
- horizon client 无法识别域_iText for Mac(OCR识别图中文字工具)
- 25个CSS3 渐变和动画效果教程
- 不使用手机代理,进行手机抓包
- [leetcode]Search in Rotated Sorted Array II
- html刘海屏高度,iphone刘海屏网页适配方法
- 【福利派送】准备了八份小礼物,祝你七夕快乐!
- ObjC点击H5图片Native预览
- python进程之间修改数据[Manager]与进程池[Pool]
- 用proteus进行一位全加器/减法器的设计与验证
- TOGAF9-certification简介
- 什么是Java分布式?
- docx4j 操作word中的chart
- vin码识别已经诞生,还在傻乎乎手工录入吗?
- 神经网络发展历史时间统计表(留存收藏)
- word保存html格式批注没有了,word批注不见了 怎么显示批注
- P4017 最大食物链计数
- 慢聊Go之Go常见的Web 开发框架