【问题标题】:java.lang.IllegalStateException: Unable to create directory: /mnt/sdcard/Downloadjava.lang.IllegalStateException:无法创建目录:/mnt/sdcard/Download
【发布时间】:2015-06-18 20:24:36
【问题描述】:

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

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" >

有人知道是什么原因造成的吗?

【问题讨论】:

  • 用模拟器测试?
  • 一个(相当愚蠢的)解决方法here
  • @AndyFaizan 不,我正在使用电话。我之前看过那个链接,但我无法自信地掌握如何将它应用到我的代码中。你能帮我解决这个问题吗?
  • 你试过这个String name = Environment.getExternalStorageDirectory().getAbsolutePath(); name += "/YourDirectoryName/" ; request.setDestinationInExternalPublicDir(name, segments.get(segments.size()-1));
  • 在我的情况下“/YourDirectoryName/”会是什么?另外,您知道实际导致此错误的原因吗?是 SD 卡空间不足吗?

标签: java android android-sdcard illegalstateexception


【解决方案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 存储出现故障,这就是为什么当我重新启动设备时它再次工作,然后在多次下载或设备没有时再次抛出错误重启了一段时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多