DownloadManager直接进入外部存储目录

Luc*_*cci 2 android path android-download-manager

例如,我尝试直接在外部存储目录中下载一个大的 zip 文件

"/mnt/sdcard/Android/data/com.vexdev.audioguida.app/files/data"
Run Code Online (Sandbox Code Playgroud)

我想我应该使用

DownloadManager.Request.setDestinationInExternalPublicDir(path, fileName)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何为其提供在不同 Android 设备上一致的路径。

而且我还试图获取稍后访问该文件的路径,如下所示:

File file = new File(path + fileName);
Run Code Online (Sandbox Code Playgroud)

我在这里问是因为我知道这两种方法需要不同的根路径,因为我试图提供这样的路径:

Application.getAppContext().getExternalFilesDir(Environment.getDataDirectory().getAbsolutePath()).getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)

但 DownloadManager 并未将文件放在 File 构造函数稍后搜索的位置。(实际上它下载到了错误的目录中!)

我正在寻找一种方法将这些文件直接下载到正确的目录中,而无需移动它们。

Com*_*are 5

我想我应该使用 DownloadManager.Request.setDestinationInExternalPublicDir(path, fileName)

不适合您建议的位置。更接近的比赛将是setDestinationInExternalFilesDir()

但我不知道如何为其提供在不同 Android 设备上一致的路径。

甚至不存在在一台设备内一致的路径,因为不同的帐户将使用不同的路径。例如,您在问题中输入的路径可能会在某些设备上用于某些帐户,但详细信息会有所不同。

我还试图获取稍后访问该文件的路径

文档中对此进行了介绍DownloadManager.Request

  • setDestinationInExternalFilesDir()映射getExternalFilesDir()Context

  • setDestinationInExternalPublicDir()映射getExternalStoragePublicDirectory()Environment

我试图提供这样的路径

那不是你使用的方式getExternalFilesDir()。请阅读JavaDocs以了解该方法的参数的有效值。getDataDirectory()不是有效值。