我需要下载文件并让他们修改它。 所以我一直在尝试将其下载到Environment.DIRECTORY_DOWNLOADS,但由于Google的新要求,即使使用
android:requestLegacyExternalStorage=”true”
标志,我也无法从Android 11访问它:https://medium.com/swlh/sample- for-android-storage-access-framework-aka-scoped-storage-for-basic-use-cases-3ee4fee404fc
我需要将其下载到授权目录 因此,通常我们使用
ACTION_OPEN_DOCUMENT_TREE
意图操作来请求用户对特定文件夹的权限,该操作可在 Android 5.0(API 级别 21)及更高版本上使用,允许用户选择特定目录,授予您的应用程序访问所有文件和子目录的权限。 -该目录中的目录,并保留该目录的 uri。就像(如果我们从 uri 获取路径)"/storage/emulated/0/Documents/myFolder"
。
val asdPermissionIntent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
startActivityForResult(asdPermissionIntent, REQUEST_CODE)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
if (data != null) {
//this is the uri user has provided us
val treeUri: Uri? = data.data
val appFolderPath = treeUri.toString()
// Save url for future
playerViewModel.updateAppFolderPath(appFolderPath)
val baseDocumentTreeUri = Objects.requireNonNull(treeUri) ?: return
val takeFlags =
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
// take persistable Uri Permission for future use
context?.contentResolver?.takePersistableUriPermission(
baseDocumentTreeUri,
takeFlags
)
}
}
}
用户授予权限后我们可以读/写该目录。有没有办法把带有
DownloadManager
的文件下载到这个目录下
我就是这样使用下载管理器的。
val path = "/storage/emulated/0/Documents/myFolder"
val request = DownloadManager.Request(Uri.parse(url))
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
.setTitle(fileName)
.setDescription(desc)
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
.setDestinationInExternalPublicDir(path, fileName)
.setAllowedOverMetered(true)
.setAllowedOverRoaming(true)
val downloadManager =
applicationContext.getSystemService(DOWNLOAD_SERVICE) as DownloadManager?
val downloadID =
downloadManager!!.enqueue(request) // enqueue puts the download request in the queue.
我得到了例外:
java.lang.IllegalStateException: Not one of standard directories: /storage/emulated/0/Download/myfolder
如何下载文件到指定目录?
我一直在尝试将其下载到Environment.DIRECTORY_DOWNLOAD
这不是存储位置,只是文件夹名称。在本例中“下载”。
您不需要任何权限即可让 DownloadManager 将文件下载到外部存储上的下载目录等。
下载文件后,您的应用程序可以从 DownloadManager 获取 uri,以便下载的文件读取或编辑野兽。