USB-накопители теперь официально поддерживаются Android исключительно через Storage Access Framework. Похоже, хранилище не монтируется в обычном смысле, насколько я могу судить, единственный способ получить доступ к данным — через Document API и ContentResolver
.
1) Больше нет простого File
способа доступа к хранилищу после прохождения SAF?
2) Если нет, то как лучше всего взаимодействовать с «файлами» на USB-накопителе в NDK, если у нас нет доступа к путям.
getExternalFilesDirs()
и kin (обратите внимание на множественное число) могут возвращатьFile
местоположений на съемном носителе, из которых ваше приложение может читать и записывать. Кроме того, у вас нет прямого доступа. - person CommonsWare   schedule 09.01.2016External storage devices returned here are considered a permanent part of the device, including both emulated external storage and physical media slots, such as SD cards in a battery compartment. The returned paths do not include transient devices, such as USB flash drives.
- person Anthony   schedule 09.01.2016getExternalFilesDirs()
и kin не работают, то у вас вообще нет доступа к флешке, разве что через Storage Access Framework. - person CommonsWare   schedule 09.01.2016getExternalFilesDirs()
возвращает только хранилище, смонтированное на оборудовании. Удивительно, что изменение такого масштаба уместилось всего в одном предложении в примечаниях к выпуску. 4.4, 5.0, 6.0. Я вижу, куда они хотели пойти с файлами, но я не думаю, что они могли бы сделать это хуже. Постоянные крупные переделки в течение двух лет. - person Anthony   schedule 09.01.2016not mounted
. Онis
доступен. Это просто требует НАМНОГО больше работы, чем раньше. Используя SAF, вы можете получить что-то вроде:content://com.android.externalstorage.documents/tree/0000-0000%3A/document/0000-0000%3ADCIM%2F100EOS5D%2FIMG_0081.CR2
, которое может быть успешно преобразовано в поток с помощью ContentResolver. Я готов поспорить, что это вдвое меньше скорости, и я знаю, что это буквально в сотни раз больше усилий, но это можно сделать. - person Anthony   schedule 10.01.2016