Не удается создать внешние файлы 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 ...
линии.