Java 使用DownloadManager下载到手机存储器上的新文件夹中

Java 使用DownloadManager下载到手机存储器上的新文件夹中,java,android,android-sdcard,android-download-manager,Java,Android,Android Sdcard,Android Download Manager,Im使用下载管理器将文件下载到手机存储器上的新文件夹中。以下是我使用的代码: DownloadManager.Request downloadSample = new DownloadManager.Request(Uri.parse(urlSample)); downloadSample.allowScanningByMediaScanner(); downloadSample.setDestinationInExternalPublicDir("/Samples/"+previewName,

Im使用下载管理器将文件下载到手机存储器上的新文件夹中。以下是我使用的代码:

DownloadManager.Request downloadSample = new DownloadManager.Request(Uri.parse(urlSample));
downloadSample.allowScanningByMediaScanner();
downloadSample.setDestinationInExternalPublicDir("/Samples/"+previewName, "sample.ttf");
downloadSample.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);    

DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(downloadSample);
这在我测试过的许多设备上都能很好地工作,但有一些设备会在日志中出现以下错误,从而强制关闭应用程序:

E/AndroidRuntime(29918): java.lang.IllegalStateException: Unable to create directory: /storage/sdcard0/Samples/Helvetica
E/AndroidRuntime(29918): at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:507)

令人恼火的是,它在某些设备上工作正常,但在其他设备上却完全不工作。有人知道为什么会发生这种情况吗?

SetDestinationNexternalPublicDir(String-dirType,String-subPath)的文档说明,dirType只能接受指定的值

此处dirType只能是android定义的目录,例如:

Environment.DIRECTORY_DOWNLOADS 
等等

您可以在以下位置找到dirType的所有可能值:

因此,使用这种方法的正确方法是:

setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, subPath)
还要注意的是,这将使文件夹在手机存储的下载文件夹。下载管理器将不允许您在手机存储的默认目录中创建文件夹

这不会为您提供创建目录的非法状态异常