使用下载管理器将文件下载到外部存储文件夹

问题描述 投票:0回答:1

我需要下载文件并让他们修改它。 所以我一直在尝试将其下载到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

如何下载文件到指定目录?

android storage
1个回答
0
投票

我一直在尝试将其下载到Environment.DIRECTORY_DOWNLOAD

这不是存储位置,只是文件夹名称。在本例中“下载”。

您不需要任何权限即可让 DownloadManager 将文件下载到外部存储上的下载目录等。

下载文件后,您的应用程序可以从 DownloadManager 获取 uri,以便下载的文件读取或编辑野兽。

© www.soinside.com 2019 - 2024. All rights reserved.