Я использую приложение Terminal Emulator на нерутированном телефоне Android 5.0.2.
При перемещении файлов из папки внешней SD-карты в другую с помощью:
mv /storage/extSdCard/DCIM/Camera/* /storage/extSdCard/phone/
Я получил:
mv: rename /storage/extSdCard/DCIM/Camera/20170519_161315.jpg to
/storage/extSdCard/phone/20170519_161315.jpg: Permission denied
Есть ли решение для этого (без рутирования телефона)?
Примечание: ls -la
в /storage/extSdCard
дает:
drwxrwx--x root sdcard_r 2016-08-10 02:18 Android
drwxrwx--- root sdcard_r 2016-11-20 09:45 DCIM
...
drwxrwx--- root sdcard_r 2017-05-19 15:46 phone
Доступ на запись на уровне файловой системы к физически внешней SD-карте без рутирования телефона невозможен со времен, предшествующих KK. Однако приложения всегда могут (с разрешением на хранилище или без него) читать и записывать в свои личные каталоги в общих хранилищах. Таким образом, вы можете перемещать файлы в /storage/extSdCard/Android/data/
.
На Android 6+ внешняя SD-карта видна там, /storage/[UUID]
где UUID соответствует файловой системе. Этот путь файловой системы доступен только для чтения (для приложений с READ|WRITE_EXTERNAL_STORAGE
предоставленным разрешением) и обхода (для всех приложений). В последнем случае приложения должны читать/записывать в свои личные каталоги. Как и внутренняя эмулируемая файловая система, контроль разрешений осуществляется через пространство имен монтирования и everybody (9997)
GID. SD-карта монтируется с тремя разными ВИДАМИ разных разрешений:
vold
создает изолированное пространство имен монтирования для каждого приложения и, в зависимости от статуса разрешения приложения на хранилище, привязывает VIEW к /storage/[UUID]
. Подробнее см. Что такое /storage/emulated/0/? и что такое UID «u#_everybody»?
Поскольку ни один из трех VIEWS не имеет разрешения на запись , приложения не имеют доступа на запись на уровне файловой системы к общедоступным каталогам на внешних SD-картах. Однако приложения, в основном проводники файлов, которые используют Storage Access Framework ( SAF ) (или ограниченный доступ к каталогу на Android 7+ или ограниченный доступ к внешнему хранилищу на Android 10+), могут создавать и удалять файлы на всей SD-карте.
USB OTG трактуется почти так же, но с одним заметным отличием :
«MOUNT_FLAG_VISIBLE означает, что том виден сторонним приложениям для прямого доступа к файловой системе.
...
временные тома, такие как устройства USB OTG, не должны быть помечены как видимые; их содержимое должно отображаться для приложений через Storage Access Framework».
Таким образом, USB-накопители не отображаются как VIEWS , вместо этого приложения видят /storage/[UUID]
(что не является фактическим) путь к файловой системе через SAF как для чтения, так и для записи. Поэтому содержимое съемных носителей также недоступно через MediaStore . Ни один из них не доступен для приложений через API :
«Возвращаемые пути не включают временные устройства, такие как флэш-накопители USB, подключенные к портативным устройствам».
Несколько внешних запоминающих устройств :
«Внешние устройства хранения, доступные через эти API, должны быть полупостоянной частью устройства (например, слотом для SD-карты в батарейном отсеке). Разработчики ожидают, что данные, хранящиеся в этих местах, будут доступны в течение длительного периода времени. По этой причине , временные запоминающие устройства (такие как USB-накопители) не должны открываться через эти API».
Однако Adoptable Storage всегда виден приложениям , будь то SD-карта или USB.
СВЯЗАННЫЙ: