Intereting Posts
Универсальный загрузчик изображений – удаление одного изображения из кеша не работает EOFException при дооснащении при выполнении синхронных запросов PUT Ошибка раздувания класса CollapsingToolbarLayout Android – Как я могу сделать кнопку вспышкой? Android obfuscate приложение с помощью proguard поддерживает обфускацию библиотечных банок – или это так? Как пользовательское приложение whatsapp обнаруживает изменение в изображении профиля своего контакта? Дизайн Photoshop от px до dp Разработка Android: невозможно создать значок @ drawable / ic_action_search Служба не останавливается при вызове метода stopService Получите сертификат отпечатка пальца SHA1 в Android Studio для Карт Google Custom android.app.Application не запускает onCreate event Эмулятор Android использует 100% -ный процессор, даже если ничего не работает на нем? Android: не удалось выделить память Ошибка добавления геофонов в Android (код состояния 1000) Как я могу создать прямоугольник с двумя изогнутыми сторонами в XML-чертеже?

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(); 

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