У меня есть простое приложение, которое обеспечивает доступ и запись данных на внешнее хранилище. Все работает нормально, пока я не перейду в Настройки → Приложения → Информация о приложении и очистите данные с помощью кнопки "Очистить данные",
то каждый вызов 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 после очистки данных в настройках Info 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 я обнаружил, что кнопка Clear data удаляет весь временный каталог приложения:
storage/sdcard0/Android/data/com.example.app/cache
в Android/data
и я не смог создать его снова через getExternalCacheDir()
или вручную (хотя я могу создавать другие каталоги в storage/sdcard0/Android/data/
).
(Android/data/com.example.app
создается снова после перезагрузки устройства, но это не то решение, которое я ищу)