1.自定义监听类,用来返回下载结果
interface DownLoadListener {
/**
* 下载成功之后的文件
*/
fun onDownloadSuccess(file: File)
/**
* 下载进度
*/
fun onDownloading(progress: Int)
/**
* 下载异常信息
*/
fun onDownloadFailed(e:Exception)
}
- 进行文件下载
/**
* @param destFileDir 文件下载目录
* @param response okHttp的返回值
* @param downLoadListener 监听事件,用于返回当前下载进度等
*/
private fun downLoad(
destFileDir: String,
response: Response,
downLoadListener: DownLoadListener
) {
val byte = ByteArray(2048)
var len: Int
val fileOutputStream: FileOutputStream
val file = File(destFileDir)
if (!file.exists()) {
file.mkdirs()
}
val apkFile = File(file, GeneralUtil.apkName)
val input = response.body?.byteStream()
val apkSize: Long = response.body?.contentLength() ?: 0L
println("获取到的apk大小:$apkSize")
fileOutputStream = FileOutputStream(apkFile)
var sum = 0.0
if (apkSize != 0L) {
while ((input?.read(byte).also {
len = it!! }) != -1) {
fileOutputStream.write(byte, 0, len)
sum += len
//返回当前的下载进度
downLoadListener.onDownloading((sum / apkSize * 100).toInt())
}
}
//刷新
fileOutputStream.flush