Intereting Posts
Исключение перехвата перехвата Как показать содержимое html в webview с помощью Android Откройте приложение Android из URL-адреса, не используя рабочий фильтр Методы getTop (), getLeft (), getX (), getY (), getWidth (), getHeight () Как установить android Lolipop в eclipse? Только использование Proguard: не удалось инициализировать DaoConfig => ArrayIndexOutOfBoundsException Как сохранить / переупорядочить прослушиватели событий на MapFragment после поворота устройства (портрет / пейзаж)? Проверьте, работает ли служба на Android? Можно ли отключить (а не просто отключить) MenuItem в Android? CollapsingToolbar не работает с не очень высоким содержанием контента Ионный навигационный просмотр и внешний ресурс Можно скрыть кнопку меню опций на ICS? Что такое onCreate (Bundle savedInstanceState) Ошибка ОС Android с некоторыми устройствами, на которых работает Jelly Bean / 4.2.1 – TextView.setError (ошибка CharSequence) Отсутствует значок Что происходит с кодом JavaScript после приложения, скомпилировано с помощью Titanium Mobile

Mkdirs возвращает false для каталога на SD-карте, в то время как родительский каталог доступен для записи

Когда я запускаю приложение для Android, мне нужно создать каталог на SD-карте, потому что небольшое число пользователей это не удается, и я не могу понять причину этого …

(Я нашел похожие проблемы, вызванные отсутствием разрешения WRITE_EXTERNAL_STORAGE, он есть, и он работает почти для всех пользователей, поэтому я не думаю, что это причина)

Я упростил предыдущую ситуацию, чтобы упростить объяснение, если создание directoy не удается, я запускаю тестовый пример, где я пытаюсь создать каталог .test на sdcard:

new File(Environment.getExternalStorageDirectory(), ".test").mkdir() -> false new File(Environment.getExternalStorageDirectory(), ".test").mkdirs() -> false 

Свойства файла соответствующих каталогов:

/sdcard/.test (существует = false canWrite = false canRead = false canExecute = err isDirectory = false isFile = false)

/ Sdcard (exists = true canWrite = true canRead = true canExecute = err isDirectory = true isFile = false)

/ (Exists = true canWrite = false canRead = true canExecute = err isDirectory = true isFile = false)

getExternalStorageState = установлен

(CanExecute возвращает err, потому что тест выполняется на sdk <9)

Предложения и идеи очень приветствуются …

Solutions Collecting From Web of "Mkdirs возвращает false для каталога на SD-карте, в то время как родительский каталог доступен для записи"

Это обычное явление, когда у вас нет разрешения в вашем манифесте.

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

Что касается меня, это было единственно неправильным.

Прежде всего, технически mkdirs (), возвращающий false, не означает, что он потерпел неудачу, это просто означало, что он не создавал каталоги. Если каталоги уже существуют, то mkdirs () будет продолжать возвращать false.

Во-вторых, в Android 6 вам не только нужны:

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

Вам также необходим некоторый эквивалент:

 ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED 

Дополнительные сведения о проверке разрешений см. В следующих разделах:
https://github.com/googlesamples/android-RuntimePermissions

У меня также возникли проблемы с созданием каталогов на SDCard. Я обнаружил, что происходит, что мой код будет работать нормально на некоторых телефонах, а также на эмуляторе. Однако другие телефоны сообщали об ошибках.

Я считаю, что есть проблема с некоторыми телефонами, Atrix и Bionic – два примера.

Эти телефоны при использовании кода Environment.getExternalStorageDirectory () действительно возвращают / mnt / sdcard.

Однако на этих телефонах SD-карта фактически / mnt / sdcard-ext.

Таким образом, где-то вдоль линий, похоже, что некоторые производители нарушили код getExternalStorageDirectory и каким-то образом возвратили ложное местоположение.

У меня было чертовски время понять это, потому что мой код работал на многих разных устройствах, и все же некоторые пользователи сообщили, что это не удалось.

Моя проблема заключалась в том, что я использовал mkdir для создания пути с несколькими каталогами, и каждый раз я ошибался. Когда я использовал mkdirs моя проблема была решена

У меня была проблема simillar, и я потратил несколько часов, чтобы понять, что не так. Он не работал на Sumsung Mega, но для других телефонов он работал нормально. У меня действительно было разрешение WRITE_EXTERNAL_STORAGE, и getExternalStorageDirectory смонтирован и доступен. Но каталог еще не создан. Что помогло? Я только что возобновил работу! И это помогло! Жаль, что никто раньше этого не советовал. Надеюсь, это поможет!

У меня такая же проблема. Разрешение было установлено, а также путь был по умолчанию (/ mnt / sdcard), но мой Android был установлен в качестве внешнего устройства хранения для быстрого просмотра SD-карты. Однако это мешает другим приложениям.

Я понял это при погружении в оболочку adb:

 $ cd /mnt $ cd sdcard cd: can't cd to sdcard $ ls -l d--------- system system 2011-12-07 01:59 sdcard 

После размонтирования изображения у меня есть:

 $ ls -l drwxrwxr-x system sdcard_rw 2011-12-07 11:46 sdcard 

Как вы можете видеть, смонтированный sdcard находится в группе пользователей системы, и никаких прав вообще нет. После разминирования группа будет изменена на sdcard_rw и предоставлены права на чтение и запись.

Возможно, у этих пользователей есть SD-карта, которая повреждена и, таким образом, смонтирована только для чтения. Если возможно, вы должны проверить с ними, чтобы увидеть, может ли что-нибудь еще записать на него файлы. Учитывая, что у вас есть разрешение WRITE_EXTERNAL_STORAGE, вам не придется беспокоиться о внесении изменений в SD-карту (а разрешения всего на SD-карте – это чтение / запись в мире для таких приложений, поэтому ничто не может испортить разрешения файлов, чтобы вызвать у них проблемы ).

Я знаю, что это старая публикация, но я думал, что могу предложить предложение. Если вы используете приложение во время разработки (т. Е. Телефон подключен к ПК через USB), то, скорее всего, SD-карта была смонтирована ПК. Вы должны отключить его (вы можете сделать это с телефона или с ПК), чтобы получить разрешение на запись, для этого требуется, чтобы он был установлен в манифесте.

Я думал, что у меня возникла эта проблема при отладке приложения. Это было неудачно, потому что SD-карта была смонтирована главным компьютером во время отладки. Отключение с компьютера заставило приложение работать снова.

Я столкнулся с этой проблемой, когда symlink / storage / emulated / 0 каким-то образом отсутствовала. То, что я сделал, было использовать приложение камеры, чтобы сделать снимок. Я заметил, что в подробностях с картинками указано, что он находится внутри / storage / emulated / 0, хотя этот каталог не существует из проводника файлов. Затем я перезагрузил телефон. После перезагрузки каталог появился в файловом проводнике.

Я столкнулся с аналогичной проблемой при использовании mkdirs (), однако, поскольку выполняю команду:

Mkdir one / two

Не работает в Linux, тогда API ( http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs () ) также терпит неудачу. Думаю, это означает, что нет возможности использовать mkdirs на Android? Мой (возможно, довольно хакерский) обход должен был создать каждый необходимый каталог отдельно:

 String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); new File(extStorageDirectory + "/one/").mkdirs(); new File(extStorageDirectory + "/one/two/).mkdirs(); 

Я столкнулся с этой проблемой на виртуальном устройстве. Для меня проблема заключалась в том, что я не определял внешнего хранилища для виртуального устройства. Надеюсь, кто-то поможет.