Как удалить файл в нативном коде, переданном из Java кода? - PullRequest
1 голос
/ 30 апреля 2020

Я изменяю код моего Android приложения (Java + native) на Android 10 Изменения в Scoped Storage.

Я объявил необходимые разрешения в своем манифесте:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Я запустил ACTION_OPEN_DOCUMENT_TREE, чтобы позволить пользователю выбрать каталог.

Что я делаю, я создаю файл на внешнем хранилище, отсоединяю дескриптор файла и перехожу к собственному коду:

DocumentFile df = documentFile.createFile("text/plain", "my_file");
ParcelFileDescriptor pfd = getApplicationContext().getContentResolver().openFileDescriptor(df.getUri(), "rw");
myNativeFunction(pfd.detachFd());

Теперь, нативная сторона читает / пишет из / в файл. И отвечает за закрытие файлового дескриптора.

У меня вопрос, как удалить этот файл по собственному коду?

Обычно, чтобы удалить файл, нужно передать ему имя пути (удалить ( ), функции unlink () принимают его как параметр). С Uri я не смог этого сделать - я получаю сообщение об ошибке «Нет такого файла или каталога».

Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2020

Благодаря CommonsWare Я понял, что мне нужно переосмыслить дизайн своего приложения. Итак, для этого случая я решил оставить весь код, работающий с DocumentFile (s) на стороне Java (включая удаление), и читать / записывать из / в файлы с использованием функций read () / write () C на нативном сторона (используя дескрипторы файлов, ранее отсоединенные от Java). В моем случае это действительно так:

  1. Android app:

    • Запустите ACTION_OPEN_DOCUMENT_TREE, чтобы выбрать дерево документа и передать соответствующее дерево Uri моему Android Библиотека AAR
    • запросить библиотеку AAR для удаления файлов в дереве Uri
  2. Библиотека AAR (Java + native):

    • создать объект DocumentFile из переданного дерева Uri
    • создать DocumentFile (s) в дереве документов и передать дескрипторы файлов в собственный код (приложению не нужно ничего знать о реальных файлах)
    • удалить DocumentFile (s)
...