java.lang.IllegalStateException:无法创建目录:/ mnt / sdcard / Download

时间:2014-04-27 15:31:26

标签: java android android-sdcard illegalstateexception

我最近在我的应用程序的开发者控制台上看到了以下崩溃:

java.lang.RuntimeException: Unable to start activity ComponentInfo{}: java.lang.IllegalStateException: Unable to create directory: /mnt/sdcard/Download
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:812)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:579)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Unable to create directory: /mnt/sdcard/Download
at android.app.DownloadManager$Request.setDestinationInExternalPublicDir(DownloadManager.java:492)
at com...BrowserIntent.a(Unknown Source)
at com...BrowserIntent.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
... 11 more

以下是相应的代码:

final Intent intent = getIntent();
final List<String> segments = intent.getData().getPathSegments();
String url = intent.getDataString();
if (!url.startsWith("https://") && !url.startsWith("http://")){
    url = "http://" + url;
}
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));              
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, segments.get(segments.size()-1));

以下是我的清单的一部分:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package=""
    android:versionCode="10"
    android:versionName="1.9" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ad_icon"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo.NoActionBar" >

任何人都知道可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:-1)

尝试重启设备。这似乎是一个愚蠢的解决方案,但它在我的nexus设备的应用程序中解决了这个问题。

当我在测试我的应用程序之前发生了什么事情,它正在工作/下载文件然后我将删除它然后重新下载几次,然后突然它会崩溃并抛出此错误说无法创建目录但已经创建/使用目录。

这就是我在代码中使用它的方式

public static String downloadPath = "/My-Folder-Name";
File fileDir = new File(downloadPath);

if (fileDir.isDirectory()) {
        request.setDestinationInExternalPublicDir(downloadPath, filename);
    } else {
        fileDir.mkdirs();
        request.setDestinationInExternalPublicDir(downloadPath, filename);
    }

我不确定这个错误是否是因为设备的SSD存储器失败了,这就是为什么当我重新启动设备时它会再次工作,然后在多次下载后再次抛出错误或当设备没有重启一段时间。