/**
* 下载文件
*/
fun downFile(url:String,listener:OnDownloadListener){
val request = Request.Builder().url(url).build();
OkHttpClient().newCall(request).enqueue(object : Callback{
override fun onFailure(call: Call, p: IOException) {
listener.onFail()
}
override fun onResponse(call: Call, response: Response) {
var `is`:InputStream? = null
val buf = ByteArray(2048)
var len = 0
var fos:FileOutputStream? = null
var saveFile:File? = null
try {
`is` = response.body()?.byteStream()
val total = response.body()?.contentLength() ?: 1
saveFile =
File(PublicTools.tools.getDir().toString() + File.separator + "jxih.apk")
if (saveFile == null){
listener.onFail()
return
}
if (saveFile.exists())saveFile.delete()
fos = FileOutputStream(saveFile)
var sum = 0
while ((`is`?.read(buf).also { len = it ?: 0 }) != -1) {
fos?.write(buf,0,len)
sum += len
val progress = (sum * 1f / total * 100).toInt()
listener.onProgress(progress)
}
fos.flush();
// 下载完成
listener.onSuccess(saveFile);
}catch (e:Exception){
e.printStackTrace()
listener.onFail()
}finally {
try {
`is`?.close()
}catch (e:IOException){
e.printStackTrace()
}
try {
fos?.close()
}catch (e:IOException){
e.printStackTrace()
}
}
}
})
}
fun getDir(): File {
val dir = File(Environment.getExternalStorageDirectory().absolutePath, "应用名")
if (!dir.exists()) {
dir.mkdirs()
}
return dir
}

网友评论