android - 如何从Android中的URL下载文件?
问题描述
从 url 下载文件的最佳方法是什么?我尝试使用下载管理器。但我不明白如何获取下载文件的 Uri 。这是我的代码:
file?.let {
val uri = Uri.parse(it)
val downloadManager = getSystemService<Any>(Context.DOWNLOAD_SERVICE) as DownloadManager?
val request = DownloadManager.Request(uri)
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or
DownloadManager.Request.NETWORK_MOBILE)
request.allowScanningByMediaScanner()
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "downloadfileName")
request.setMimeType("*/*")
downloadManager?.enqueue(request)
}
也许今天有更好的方法来下载文件并获取 Uri。请帮我
解决方案
如何从 URL 下载文件
fun downloadPdf(baseActivity:Context,url: String?,title: String?): Long {
val direct = File(Environment.getExternalStorageDirectory().toString() + "/your_folder")
if (!direct.exists()) {
direct.mkdirs()
}
val extension = url?.substring(url.lastIndexOf("."))
val downloadReference: Long
var dm: DownloadManager
dm= baseActivity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val uri = Uri.parse(url)
val request = DownloadManager.Request(uri)
request.setDestinationInExternalPublicDir(
"/your_folder",
"pdf" + System.currentTimeMillis() + extension
)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.setTitle(title)
Toast.makeText(baseActivity, "start Downloading..", Toast.LENGTH_SHORT).show()
downloadReference = dm?.enqueue(request) ?: 0
return downloadReference
}
在调用此方法之前,请检查运行时权限:
Manifest.permission.WRITE_EXTERNAL_STORAGE
推荐阅读
- vba - 在特定时间触发宏
- vim - 为什么 VIM 的帮助页面会在每个帮助命令前加上 ["x]?
- android - 线程“queued-resource-processor_1”中出现异常的原因是什么?
- database - MongoDB - 查询嵌入式文档数组
- javascript - 在 Web Worker 中访问串行端口
- apache-spark - 如何在 Spark 和 Cassandra 中将数据从较小的表映射到较大的表?(第一表的主键是第二表的分区键)
- authentication - 使用 OAuth 集成产品
- ios - 限制两个特定文本字段中的字符数
- amazon-ec2 - 我可以为 ECS 使用现有的、正在使用的 EC2 实例吗?
- javascript - 使用 JavaScript 或 jQuery 在函数中包装或不包装