Подтвердить что ты не робот

Некоторые устройства Android рассматривают внутреннее хранилище как SD-карты и внешнее хранилище как EXTSD

У меня есть группа устройств Android от разных поставщиков.

Некоторые из них прикрепляют /mnt/sdcard к внутреннему хранилищу и /mnt/extsd к внешнее хранилище (сценарий 1) и другие прикрепляют /mnt/sdcard к внешнему хранилищу (сценарий 2)

Я думаю, что второй сценарий является стандартным, так как Android API предоставляет дескриптор этого пути. Теперь проблема в том, что в сценарии 1 /mnt/extsd становится readonly даже с разрешением WRITE_EXTERNAL_STORAGE!

Это означает, что я могу читать данные только с реальной внешней SD-карты и не иметь возможности писать на нее.

Есть ли обходной путь для этого, поэтому я могу писать в папку extsd?

4b9b3361

Ответ 1

Единственная работа, которую я нашел до сих пор, чтобы получить доступ на запись на устройстве, - это укоренение устройства:(

Samsung обеспечивает работу с манифестной записью

Более подробная информация доступна в следующих ссылках

http://www.xda-developers.com/android/android-3-2-code-inadvertently-preventing-write-access-to-external-storage/

и

http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/

Выдержки:

Казалось бы, у Google есть ошибка в коде AOSP, который был представленный на Android 3.2, который влияет на то, как ОС управляет USB Хранение и может препятствовать доступу на запись к SD-картам и USB-накопителям. XDA Elite Recognized Developer, старший модератор и редактор новостей Chainfire подводит итог этой проблеме в своем блоге:

"В прошлом приложение запрашивало" WRITE_EXTERNAL_STORAGE "разрешение, которое предоставило бы доступ на запись во все внешние хранилища (пользователь/группа" sdcard_rw "). По-видимому, это было изменено только на предоставить доступ на запись к основному внешнему хранилищу. Второй было введено разрешение" WRITE_MEDIA_STORAGE ", которое предоставит доступ к другим внешним хранилищам (пользователь/группа" Media_rw ").

Проблема в том, что третьей стороне на самом деле не будет предоставлено это разрешение, только системные приложения и приложения, предоставляемые устройством изготовителю обычно предоставляется такое разрешение. Есть исключения, по-видимому, на некоторых устройствах сторонние приложения будут предоставил это разрешение, но, согласно источникам AOSP, theyre конечно, не предполагается".

Ответ 2

Environment.getExternalStorageState() returns path to internal SD mount point like "/mnt/sdcard"

Environment.getExternalStorageDirectory() относится к тому, что производитель устройства считается "внешним хранилищем". На некоторых устройствах это съемный носитель, например SD-карта. На некоторых устройствах это часть вспышки на устройстве. Здесь "внешнее хранилище" означает "материал, доступный через режим USB Mass Storage при установке на хост-машине", по крайней мере для Android 2.x и выше.

But the question is about external SD. How to get a path like "/mnt/sdcard/external_sd" (it may differ from device to device)?

Android не имеет понятия "внешний SD", кроме внешнего хранилища, как описано выше.

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

Ответ 3

На корневом устройстве вы можете изменить /system/etc/permissions/platform.xml, чтобы "исправить" проблему с разрешениями. Для меня работали следующие:

  • adb pull/system/etc/permissions/platform.xml
  • Измените файл platform.xml таким образом, чтобы media_rw был включен в разрешение WRITE_EXTERNAL_STORAGE следующим образом:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
       <group gid="sdcard_rw" />
       <group gid="media_rw" />
    </permission>
    
  • adb push platform.xml/system/etc/permissions/platform.xml

  • Перезагрузите устройство