gpt4 book ai didi

android - DownloadManager 无法使用 Pie 下载到三星上的外部存储

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:45 25 4
gpt4 key购买 nike

在 Android 9 (Pie) 上的 Samsung Galaxy S9、S9+ 上使用 Android DownloadManager 将文件下载到外部存储失败。

下载适用于运行 Android 8 的三星设备或运行 Android 9 的其他设备(例如 Pixel 2)

我已将以下权限添加到 list 中:

 "android.permission.WRITE_EXTERNAL_STORAGE", 
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.INTERNET"

我还在运行时请求了 READ/WRITE_EXTERNAL_STORAGE 权限。

文件路径为:/storage/4295-DDD5/Android/data/com.example.myapplication/files/filename.file并且这个文件路径存在,我使用 AndroidStudio 的 Device File Explorer 创建了它

创建下载的方法:

public void downloadFile(String url, String filePath) {
DownloadManager mDownloadManager =
(DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);

DownloadManager.Request request = new
DownloadManager.Request(Uri.parse(url));

request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE |
DownloadManager.Request.NETWORK_WIFI);

request.setVisibleInDownloadsUi(true);

request.setDestinationUri(Uri.parse("file://" + filePath));

mDownloadManager.enqueue(request);
}

预期的结果是将指定文件从 url 下载到 filePath 而不是我在日志中收到以下错误:

D/DownloadManager: [8616] Starting com.example.myapplication
W/DownloadManager: [8616] Stop requested with status FILE_ERROR: Failed to generate filename: java.io.IOException: Permission denied
D/DownloadManager: [8616] Finished with status WAITING_TO_RETRY
V/DownloadManager: MIME Type = application/octet-stream
I/DownloadManager: Download 8616 finished with status WAITING_TO_RETRY
I/DownloadManager: Notification Clear Download 1:com.example.myapplication

最佳答案

我设法通过使用 setDestinationInExternalFilesDir 让它工作(使用 null 作为第二个参数)。

这应该将文件存储在与请求完全相同的位置,但实际的实现似乎适用于三星设备。此外,我不请求任何许可 (*_EXTERNAL_STORAGE)。

关于android - DownloadManager 无法使用 Pie 下载到三星上的外部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55592325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com