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

时间:2014-04-27 19:49:54

标签: java android android-sdcard android-download-manager

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

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)

令人讨厌的是它在某些设备上工作正常但在其他设备上根本没有。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

setDestinationInExternalPublicDir(String dirType,String subPath)的文档说dirType只能使用指定的值。

这里dirType只能是android定义的目录,例如:

Environment.DIRECTORY_DOWNLOADS 

您可以在http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

找到dirType的所有可能值

因此使用此方法的正确方法是:

setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, subPath)

另请注意,这将使手机存储中的“下载”文件夹中的文件夹成为可能。下载管理器不允许您在手机存储的默认目录中创建文件夹。

这不会给你创建目录的IllegalStateException。