具体查看代码:

首先在清单文件配置三个权限读写权限和请求安装权限(兼容Android8.0手机)如下:

<!--安装apk权限--><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /><!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 往SDCard 读写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

兼容Android7.0 FileProvider

 <providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths" /></provider>

记得在res下面配置xml文件夹:如下:

下面是provider_paths.xml的文件内容

<?xml version="1.0" encoding="utf-8"?>
<paths><external-pathname="external_files"path="." />
</paths>

然后上下载和安装的代码:

  /*** 下载apk的方法** @param activity 上下文*/public void downloadApk(final Activity activity) {HttpUtils httpUtils = new HttpUtils();// 判断sd卡是否挂载if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {final String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/jfsj.apk";
//            httpUtils.download("http://cdn1.down.apk.gfan.net.cn/Pfiles/2020/05/21/gfanxapp_20200521194529_45df3390-b57e-4c16-b0fb-fb0ebcac1a80.apk", "/mnt/sdcard/mobilesafe72_2.apk",httpUtils.download("https://imtt.dd.qq.com/16891/apk/53F52C519A0CDEF8A6BA6579A7BD20F2.apk?fsname=com.wifi.key_5.8.9_589.apk&csr=1bbd", filePath,new RequestCallBack<File>() {// 下载成功的时候调用@Overridepublic void onSuccess(ResponseInfo<File> arg0) {CommonLoading.getInstance().closeDialog();Toast.makeText(activity.getApplicationContext(), "下载成功", Toast.LENGTH_SHORT).show();// 安装最新版本install(filePath, activity);}// 下载失败的时候调用@Overridepublic void onFailure(HttpException arg0, String arg1) {Log.e("下载失败", "失败了:" + arg0.getLocalizedMessage());Toast.makeText(activity.getApplicationContext(), "下载失败了," + arg0.getLocalizedMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onLoading(long total, long current, boolean isUploading) {super.onLoading(total, current, isUploading);long progress = (current / total) * 100;Log.e("下载进度", current + "/" + total + ":进度" + progress + "%");}});}}/*** 安装最新版本** @param filePath 安装包的路径*/private void install(String filePath, Activity activity) {Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");Uri fileURI;File file = new File(filePath);if (Build.VERSION.SDK_INT >= 24) {fileURI = FileProvider.getUriForFile(activity, activity.getApplicationContext().getPackageName() + ".provider", file);} else {//android70.以下手机fileURI = Uri.fromFile(file);}//Android7.0以上必须添加如下代码activity.grantUriPermission(activity.getPackageName(), fileURI, Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setDataAndType(fileURI, "application/vnd.android.package-archive");// 当当前的activity退出的时候,会调用之前activity的onActivityResult方法activity.startActivityForResult(intent, 0);}

使用方法:调用downloadApk这个方法即可。

注意记得添加动态权限否则报错,还有就是如果使用android9.0以上手机并且你的网址是http的非https,记得在清单文件添加如下:否则可能会无法下载apk

android:usesCleartextTraffic="true"

Android开发之下载Apk安装的方法兼容Android7.0和8.0及以上相关推荐

  1. android应用市场点击下载APK安装详解

    Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...

  2. Android 下载APK 安装APK 打开APK

    今天有了一个这样的需求 :下载一个apk文件,然后当你下载完成后,按钮的文字发生改变,变成点击安装,然后安装完成之后,变成打开. 这是下载apk的方法: ? 1 2 3 4 5 6 7 8 9 10 ...

  3. Android:Android SDK的下载与安装

    Android SDK的下载与安装 一.Android SDK简介 Android SDK(Software Development Kit,软件开发工具包)被软件开发工程师用于为特定的软件包.软件框 ...

  4. Android开发之打包APK详解

    Android开发之打包APK详解 一.APK简介 二.无需密匙的 apk 三.有密匙的 apk(常规) 生成 apk 其实有两个方法: 方法一:生成无密匙的 apk 文件: 方法二:生成有密匙的 a ...

  5. 文件管理器android实现,Android开发之简单文件管理器实现方法

    易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...

  6. Android开发——RecyclerView特性以及基本使用方法(二)

    0.  前言 随着Android的发展,虽然ListView依旧重要,但RecyclerView确实越来越多的被大家使用.但显然并不能说RecyclerView就一定优于ListView,而是应该根据 ...

  7. android.cat 镜像,Android开发利器之pidcat安装方式

    介绍pidcat: pidcat 是Android届JakeWharton大神开发的一款命令行工具,堪称Android开发利器,它能方便Android程序猿捕获日志,过滤日志,定位程序问题,超级好用. ...

  8. go语言01SDK、GoLand开发工具下载和安装

    Go语言学习01:SDK.GoLand开发工具下载和安装,及测试第一个程序:输出hello world 半夜凌晨写的笔记,如果对你有帮助,加个关注或点赞哈感谢,吼吼~ Go语言的学习,开始安装软件就遇 ...

  9. Android开发环境搭建及常见问题解决方法

    Android开发环境搭建及常见问题解决方法 参考文章: (1)Android开发环境搭建及常见问题解决方法 (2)https://www.cnblogs.com/rwxwsblog/p/476978 ...

最新文章

  1. docker 镜像修改的配置文件自动还原_原创 | 全网最实在的docker入门教程四
  2. StaticLayout的介绍/使用
  3. 带有Spring的JavaFX 2
  4. 不用背景图片,只用css代码实现面包屑样式
  5. scala----计数器zipWithIndex
  6. 虚拟服务器怎么搭建php,怎样搭建Apache+MySQL+PHP服务器
  7. 最新android studio 第三方库包导入方法jar,so,module
  8. 数组中元素与字节的关系
  9. 【matlab】clc,close,close all,clear,clear all作用
  10. 谈胶印机供水装置调节的技巧
  11. 翻车率贼高的一个小题目
  12. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记5:第三章 常用函数1——文件读写、算术平均值、最大值最小值、极值
  13. 120篇精华文章打包送,干货慎入!
  14. 3DMAX基础学习总结(1)
  15. java script总结1
  16. DFC Search In Depth-转
  17. 钢铁企业如何分步实施信息化
  18. LateX 全文(局部)字体大小设置
  19. 查询成绩表中同时考了科目1和科目2,并且科1大于科2的学生
  20. 海滩上有一堆桃子,五只猴子来分

热门文章

  1. 《c语言从入门到精通》看书笔记——第7章 循环控制
  2. android 内部拦截,如何使用proxy,如何在内部拦截get方法
  3. html 给 ol添加abc,英语abc怎么写
  4. php一句话过狗,整理的最新WebSHell (php過狗一句話,過狗菜刀,2016過狗一句話,2016php免殺一句話)...
  5. add git 指定类型文件夹_UE4 使用git配合远程仓库
  6. 吸尘车-真空吸尘车:真空吸尘车
  7. 阅读王概凯老师架构漫谈系列总结
  8. sqlserver改主键初始ID
  9. appium 5-27屏幕旋转、
  10. 分布式系列四: HTTP及HTTPS协议