【问题标题】:DownloadManager behaviour on directory creation目录创建时的 DownloadManager 行为
【发布时间】:2016-04-25 17:10:01
【问题描述】:

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

 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);

这工作正常,至少在三星 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 the external storage directory cannot be found or created.

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

【问题讨论】:

  • 你能粘贴日志吗
  • @RahulPatil 我可以,但这更像是一个预期的行为问题,如果我像我在问题上所说的那样自己创建 µECS 目录,则错误 irs Failed to create target file /storage/emulated/0/Download/µECS/AU3110005_AU3110006_Celulas não linfoides.pdf at com.android.providers.downloads.Helpers.getFullPath(Helpers.java:204) 它已修复,我只想知道我是否应该这样做或者不是我无法理解的文档

标签: android android-download-manager


【解决方案1】:

在没有创建子目录的情况下,我在 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();
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多