У меня есть простое приложение, которое обращается к внешнему хранилищу и записывает данные во внешнее хранилище. Все работает нормально, пока я не перехожу в «Настройки» -> «Приложения» -> «Информация о приложении» и не очищаю данные с помощью кнопки «Очистить данные», после чего каждый вызов getExternalCacheDir()
начинает возвращать значение null.
Я разрабатывал Nexus 7 под управлением Android 4.2.2.
Мой манифест выглядит так:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.package"
android:versionCode="5"
android:versionName="1.3"
xmlns:tools="http://schemas.android.com/tools">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
...
Фрагмент кода, который не работает:
Log.d(TAG, "getExternalStorageState() = " + Environment.getExternalStorageState());
Log.d(TAG, "getExternalCacheDir() = " + c.getExternalCacheDir());
Log.d(TAG, "getExternalFilesDir(null) = " + c.getExternalFilesDir(null));
Log.d(TAG, "getExternalFilesDir(Environment.DIRECTORY_MOVIES) = " + c.getExternalFilesDir(Environment.DIRECTORY_MOVIES));
LogCat после установки и запуска приложения:
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalStorageState() = mounted
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalCacheDir() = /storage/emulated/0/Android/data/com.example.package/cache
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalFilesDir(null) = /storage/emulated/0/Android/data/com.example.package/files
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalFilesDir(Environment.DIRECTORY_MOVIES) = /storage/emulated/0/Android/data/com.example.package/files/Movies
LogCat после очистки данных в настройках App Info:
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalStorageState() = mounted
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external cache directory
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalCacheDir() = null
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external files directory
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalFilesDir(null) = null
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external files directory
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalFilesDir(Environment.DIRECTORY_MOVIES) = null
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external cache directory
После очистки данных и выполнения метода приложения getExternalCacheDir()
возвращается значение null, хотя Environment.getExternalStorageState()
возвращает значение «смонтировано». Кто-нибудь знает, что может быть не так?
ИЗМЕНИТЬ
С помощью Gjordis я обнаружил, что кнопка Очистить данные удаляет весь временный каталог приложения:
storage/sdcard0/Android/data/com.example.app/cache
in Android/data
и я не смог создать его снова через getExternalCacheDir()
или вручную (хотя я могу создать другие каталоги под storage/sdcard0/Android/data/
).
(Android/data/com.example.app
создается снова после перезагрузки устройства, но это не то решение, которое я ищу)
Android/data
. Единственный способ заставить его снова работать - перезагрузить устройство - см. Отредактированный вопрос. - person Ondřej Z   schedule 15.05.2013