gpt4 book ai didi

android - DownloadManager 在目录创建时的行为

转载 作者:行者123 更新时间:2023-12-02 14:26:52 25 4
gpt4 key购买 nike

有人提出了一些类似的问题,但我的有点不同,我有以下代码在我的应用程序上进行下载:

 DownloadManager.Request request = new DownloadManager.Request(uri)
.setTitle(fileInfo.getFileName())
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
getString(R.string.app_name) + File.separator + fileInfo.getFileName());

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
}
manager.enqueue(request);

至少在 Samsung S4、Nexus 4、Nexus 7 上这工作正常,没有提示,但是我最近发现在某些设备上它无法创建目录并出现错误:

所以现在我正在检查目录并创建它(如果不存在)

File downloadDir = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+ File.separator + getString(R.string.app_name));

if (!downloadDir.exists()){
boolean mkdir = downloadDir.mkdir();
}

我的问题是为什么 DownloadManager 的行为不同,这是 Android 版本还是供应商问题,以及预期的行为是什么,因为 getExternalStoragePublicDirectory 的文档指出它可能会抛出 IllegalStateException: IllegalStateException If无法找到或创建外部存储目录。

我认为它应该尝试创建目录,在这种情况下,我没有理由或不需要使用 mkdir 函数,但事实并非如此

最佳答案

我在 LG G3 上也有同样的行为,但没有创建子目录:

W/DownloadManager: Aborting request for download 544: Failed to create target file /storage/emulated/0/Download/Sub Directory/IMG_20150422_160932.jpg
com.android.providers.downloads.StopRequestException: Failed to create target file /storage/emulated/0/Download/Sub Directory/IMG_20150422_160932.jpg
at com.android.providers.downloads.Helpers.getFullPath(Helpers.java:213)
at com.android.providers.downloads.Helpers.generateSaveFile(Helpers.java:166)
at com.android.providers.downloads.DownloadThread.processResponseHeaders(DownloadThread.java:2054)
at com.android.providers.downloads.DownloadThread.access$500(DownloadThread.java:130)
at com.android.providers.downloads.DownloadThread$ContentAnalyzer.init(DownloadThread.java:274)
at com.android.providers.downloads.DownloadThread.executeDownload(DownloadThread.java:922)
at com.android.providers.downloads.DownloadThread.runInternal(DownloadThread.java:784)

在帮助之前调用此方法:

        private void createDirectoryIfNecessary() {
File downloadDir = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+ File.separator + subdirectory);
if (!downloadDir.exists()){
downloadDir.mkdirs();
}
}

关于android - DownloadManager 在目录创建时的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32455060/

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