Мой телефон разработки - Nexus 5
, работает Android 4.4.2
.
В моем приложении я пытаюсь создать папку на внешнем хранилище, которая будет хранить отладочную информацию для моего приложения. В основном он будет содержать все команды, выполняемые приложением, поэтому, когда пользователь сталкивается с проблемой, у меня есть возможность отправить мне информацию из папки отладки для анализа.
Я начал, пытаясь записать файл в папку, но обнаружил, что возникла ошибка при создании папки. Сначала я использовал mkdir()
, затем перешел на mkdirs()
, который также не работал.
У меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
в моем манифесте.
Вот код для создания папки:
File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");
String path = folder.getPath();
if(!folder.mkdirs() || !folder.exists()){
Log.e(LOG_TAG, path + " failed");
} else {
Log.d(LOG_TAG, path + " succeeded");
}
Вот что я также пробовал:
//Check SD card state
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
} else {
Log.d(LOG_TAG, "External storage is not read only or unavailable");
}
Это возвращает, что внешняя память не доступна только для чтения или недоступна.
Я также пробовал разные пути, такие как File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");
Вот где это стало действительно запутанным.
Я пробовал разработку на разных телефонах. Во-первых, я схватил Galaxy S4 GT-i9505
running Android 4.2.2
, и он сработал. Мне удалось создать папки и написать им. Это показало мне, что код работает. Также путь, возвращаемый при запуске кода на S4 и Nexus 5, был таким же.
Тогда я подумал, что это может быть версия для Android. Поэтому я схватил Nexus 4
с Android 4.4.2
, и код тоже работал над ним. Создал папки и разрешил мне писать им.
Ни один из телефонов не укоренен и не является стандартным. Там нет специальных приложений или чего-либо, что я могу думать о настройках на Nexus 5, которые могут вызвать проблемы с разрешениями. Соединение установлено на Media Device (MTP).
EDIT:
Я должен добавить, что я попробовал следующее, которое также не сработало:
- Запись файла в корневой каталог внешнего хранилища
- Создание файла в корневом каталоге внешнего хранилища и его запись
- Создание папки в выделенном пути и запись в нее файла
- Создание файла в указанном пути и его записи
Я запутался в том, что вызывает это, есть ли что-нибудь еще, что я могу проверить или изменить, чтобы исправить проблему?
ИЗМЕНИТЬ 2:
Оказывается, проблема возникла из-за, я думаю, индексации.
В основном все другие устройства, на которых я тестировался, позволили мне снова подключить USB-соединение и просмотреть созданные файлы и папки.
По какой-то причине мой Nexus 5 не индексирует папки/файлы, даже если они существуют.
Я загрузил другое стороннее приложение-проводник файлов и заметил, что все папки и файлы были там.
Итак, чтобы просматривать эти папки и файлы с помощью USB-отладки, я должен перезагрузить телефон, чтобы повторно проиндексировать их, что кажется довольно раздражающим, но это лучше, чем он вообще не работает.
Спасибо.