下面是我集成的用于下载视频(.mp4)功能的代码。此代码可在我的 Android 8 设备上运行。相同的代码在最新的 Android 版本中不起作用。可能是我遗漏了一些东西或者有任何弃用问题?
val dm = getSystemService(DOWNLOAD_SERVICE) as DownloadManager
val url =
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4"
val request = DownloadManager.Request(
Uri.parse(url)
)
fileName = url.substring(url.lastIndexOf('/') + 1)
fileName =
fileName.substring(0, 1).uppercase(Locale.getDefault()) + fileName.substring(1)
request.setDestinationInExternalFilesDir(
this,
Environment.DIRECTORY_DOWNLOADS,
fileName
)
enqueue = dm?.enqueue(request)!!
我尝试调试,查找是否存在有关 URL 的任何问题,但没有任何问题,也尝试了错误日志,但没有任何错误。
这样做的原因是因为,我使用 http url 来下载视频,而不是使用 DownloadManager 使用 https(安全),并且我没有在清单中将
android:usesCleartextTraffic
提到为 true
。因此,出于安全原因,下载管理器无法正常工作,因为 http url 在互联网通话加密方面并不安全。 userCleartextTraffic 表示应用程序是否打算使用明文流量(未加密的网络流量)。
因此,当我在清单中将
android:usesCleartextTraffic
提到为 true
时,它开始使用来自 Android 9.0(API 级别 28) 及更高版本的 http url,因为在此版本以下没有引入标签,并且它会被忽略因此不是必需的,它将在这个版本以下工作。