У меня есть приложение для Android, которое использует много родного кода на C ++. Приложение должно работать с файлами, расположенными на SDCard (чтение, создание, добавление). Но Kitkat + запретил запись в SDCard для сторонних приложений. Android 5 представил новый API, который позволяет это снова.
Как использовать новый API доступа к SD-карте, представленный для Android 5.0 (Lollipop)?
Все примеры и документация, которые я нашел, в основном для Java. Примеры для нативного кода не существуют или очень неясны. Поэтому я хочу задать несколько вопросов.
Ссылка выше содержит ценный пример того, как получить DocumentFile, который может вернуть ParcelFileDescriptor. Из этого объекта я могу получить родной файловый дескриптор — ParcelFileDescriptor.getFd (). Это целое число, которое я посылаю в код c ++ через jni.
В C ++ я открываю файл с помощью fdopen (fd).
Мои вопросы:
Спасибо
РЕДАКТИРОВАТЬ: я получаюFD и detachFD работает. Но я так и не нашел ответ, как правильно заменить ftruncate, который тоже нуждается в записи, и я не нашел версию ftruncate, которая принимает файловый дескриптор как ввод
Попробуйте ниже ссылки:
Android — запись / сохранение файлов только из собственного кода:
Android — запись / сохранение файлов только из собственного кода
Android NDK Написать файл:
Android NDK Написать файл
Файловые операции в Android NDK:
Файловые операции в Android NDK
1) да, используйте файловые дескрипторы и fdopen
2)
ParcelFileDescriptor
,ParcelFileDescriptor
, (это закрывает вашу ссылку на Java)Fd просто int
представляющий идентификатор linux для файла. На родном:
Два закрытия делают разные вещи.
Примечание: вам все еще нужно разрешение SAF для файла или более высокого уровня root.