2015-05-13 4 views
2

У меня есть следующая ситуация: Android 4.1, устройство не имеет внешней SD-карты. Следующий код:Environment.getExternalStorageDirectory() возвращает неправильный путь

File dir = new File(Environment.getExternalStorageDirectory()); 

возвращает
/хранение/sdcard0

Затем я пытаюсь создать файл там и получить ошибку
java.io.IOException: открыть не удалось: EACCES (Отказано в).
Мое приложение имеет все необходимые строки в своем манифесте:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Для того, чтобы решить эту проблему, я начал ADB и получил список файлов, это фрагмент:

lrwxrwxrwx корень корень 2000-01-01 3:12 SDCard ->/хранение/sdcard0
lrwxrwxrwx корень корень 2000-01-01 3:12 sdcard2 ->/хранение/sdcard1
д - хт-хт-й система sdcard_r 2000-01- 01 03:12 хранение

И у меня нет разрешения на доступ к /хранению/sdcard0, но я могу получить доступ к /хранению/sdcard1 есть каталоги:
ABBYY
Сигнализация
Android
Книги
CheetahBrowser
DCIM
Скачать
SlideIT
т.д.

Кажется, что getExternalStorageDirectory() просто работает плохо. И это кажется странным из-за других приложений, которые могли бы записывать файлы в правильном месте. Что я делаю неправильно?

Update:
getExternalStorageState() возвращает "удален"

Я игнорировал результат getExternalStorageDirectory() и установить путь вручную "/ хранение/sdcard1", то все хорошо работает, я могу создать dirs и файлы.

+0

проверить хранилище с помощью getExternalStorageState(), если он установлен или нет ... – Opiatefuchs

ответ

1

Я решил проблему, она была экзотической. Устройство вначале имело внешнюю SD-карту, и эта карта была «памятью по умолчанию». Затем SD-карта была удалена, но память по умолчанию не была переключена во внутреннее «встроенное» хранилище. В результате система вернула неверный путь к хранилищу, пока не исправила настройку «по умолчанию», и проблема исчезла.

+0

спасибо за ваше нахождение и ответ, я полагаюсь на getExternalStorageDirectory(), чтобы создать папку во внутренней «внутренней памяти телефона» пользователя, которая не является съемной SD-картой. Как вы исправили «память по умолчанию»? также как я узнаю, что getExternalStorageDirectory() является надежным. Если он не может использовать, как я могу найти правильный путь для использования?Большое спасибо – DayDayHappy

+0

@CaptainVoronin: Как вы исправили память по умолчанию при кодировании во время выполнения? –

Смежные вопросы