Не удается создать внешние файлы Dir в Android. Запись внешнего хранилища присутствует

я попытался использовать оба моих ApplicationContext и мое призвание Service ' s Context для доступа к внешнему каталогу. К сожалению, он продолжает возвращаться null, и LogCat сообщает, что не удалось создать внешний каталог. Я уверен, что у меня есть WRITE_STORAGE_PERMISSION присутствует, но он все равно не будет работать. На моем устройстве работает API 10 (2.3.3) vanilla android. Есть идеи?

вот мой манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="droid.signboard" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" />


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



<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:name="SignboardApp">
    <receiver android:name=".ApplicationStarter">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            <action android:name="droid.signboard.LAUNCHER_START"></action>
        </intent-filter>
    </receiver>
    <activity android:label="@string/app_name"
        android:screenOrientation="landscape" android:launchMode="singleTop"
        android:name=".view.Signboard">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"></action>
            <category android:name="android.intent.category.LAUNCHER"></category>
        </intent-filter>
    </activity>
    <service android:name=".controller.MasterControllerService">
        <intent-filter>
            <action
                android:name="droid.signboard.LAUNCH_SERVICE_FROM_ACTIVITY"></action>
        </intent-filter>
    </service>


</application>
</manifest>

и вот где код перепутался:

private boolean canWriteEx () {

    String state = Environment.getExternalStorageState ();

    if (state.equals (Environment.MEDIA_MOUNTED)) {
        Log.i (TAG, "Can write to external directory: "
                + context.getExternalFilesDir (null).getAbsolutePath ());
        return true;
    } else {
        Log.i (TAG, "Cannot write to external directory: "
                + context.getExternalFilesDir (null).getAbsolutePath ());
        return false;
    }
}

код метод a Runnable, который называется Service. Конструктор Runnable принимает Context в качестве параметра. Это Context используемого кода. Код выдает исключение при вызове журнала that успешно, подразумевая, что внешнее хранилище присутствует и доступен.

ОБНОВЛЕНИЯ ПОПЫТОК ИСПРАВЛЕНИЯ:

чистая установка не работает.
Возврат к API 9 не работает, хотя он работал ранее.

3 ответов


основные, но я действительно не знаю, почему это работает сейчас. Я перезагружаю устройство, а потом вдруг это снова сработает;Context#getExternalFilesDir () перестала отвечать null. Несмотря на то, что он работает сейчас (спасибо и реквизит The IT CrowdРой и Мосс), должен ли я сообщить об этом в Google или что-то еще?


Это старый поток, но я просто столкнулся с той же проблемой и нашел причину, по которой я удивлен, не более распространен. Я пытался записать во внешнее хранилище, пока мое устройство было подключено к компьютеру / Eclipse.. и я получал следующую ошибку,

06-25 16:16:09.565: W / ApplicationContext (4290): невозможно создать каталог внешних файлов 06-25 16: 16: 09.565: W / System.err (4290): java.Ио.FileNotFoundException: /full_archive.zip: открыть не удалось: EROFS (Файловая система только для чтения) 06-25 16: 16: 09.565: W / System.err (4290): at libcore.Ио.Иобридж.открыть (IoBridge.java: 416) 06-25 16: 16: 09.565: W / System.err (4290): at java.Ио.FileOutputStream.(FileOutputStream.java: 88) 06-25 16: 16: 09.565: W / System.err (4290): at java.Ио.FileOutputStream.(FileOutputStream.java: 73) 06-25 16: 16: 09.565: W / System.err (4290): at com.сена.трофей.база данных.DownloaderThread.run (DownloaderThread.Ява:79) 06-25 16: 16: 09.573: W / System.err (4290): вызвано: либкоре.Ио.ErrnoException: открыть не удалось: EROFS (файловая система только для чтения) 06-25 16: 16: 09.573: W / System.подстраховаться(4290): в libcore.Ио.В POSIX.открыть(родной способ) 06-25 16: 16: 09.573: W / System.err (4290): at libcore.Ио.Блокгардос.открыть (BlockGuardOs.java: 110) 06-25 16: 16: 09.573: W / System.err (4290): at libcore.Ио.Иобридж.открыть (IoBridge.java: 400) 06-25 16: 16: 09.573: W / System.err (4290):... 3 более

Это из руководства разработчика...

внимание: внешнее хранилище может стать недоступным, если пользователь монтирует внешнее хранилище на компьютере ...

просто отсоединение телефона от моего компьютера / IDE решило проблему для меня.


вам нужно иметь разрешение WRITE_EXTERNAL_STORAGE в вашем AndroidManifest.XML. По крайней мере, это решило мою проблему.

добавить строку <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> перед <application ... линии.