Открытие файлов по строковому пути с Android NDK - PullRequest
0 голосов
/ 18 декабря 2018

В последнее время я просматривал документацию по доступу к файлам Android, но мне кажется, что я не могу понять, как на самом деле открыть файл, заданный в виде строки, содержащей путь к файлу, который я хотел бы открыть.

То, что я (в конечном итоге) хочу выполнить, выглядит примерно так:

  1. Пользователь выбирает текстовый файл определенного типа, используя Intents, получая URI для файла.Из этого я извлекаю путь (getPath()) и передаю эту строку в собственный код C ++.
  2. Собственный C ++ открывает файл из строки, анализируя содержимое.
  3. Выполните некоторые фактическиеработать с вышеописанным.

Из того, что я нашел до сих пор, кажется, что больше невозможно открывать файлы таким образом (по крайней мере, начиная с SDK версии 26):

  • Жестко закодированный путь к файлу, который, я знаю, существует, дает мне permission denied.
  • Путь, полученный от getPath(), вызывает ошибку No such file or directory.

Один из обходных путей - открыть файл на стороне Java с помощью ContentResolver, а затем передать дескриптор файла на собственную сторону.Это работает, но это проблематично: файлы могут содержать ссылки на другие файлы, которые будут открыты («включаемые файлы»), что делает такое решение ограниченным.

Просто чтобы прояснить ситуацию, эти файлы находятся локально на«USB» раздел системы Android, не связанный с самим приложением.Не так, как ресурсы / ресурсы для APK или чего-либо подобного, что, как кажется, требуют другие вопросы такого рода.

В общем, я предполагаю, что вопрос заключается в следующем: возможно ли открыть файл и, возможно, любые другие файлы?это относится, учитывая путь со стороны Java приложения?Существуют ли какие-либо требования для этого, например, запрос правильных разрешений для папок или чего-то подобного?

1 Ответ

0 голосов
/ 19 декабря 2018

Начиная с Android 6.0 (уровень API 23), вам нужно запрашивать разрешения каждый раз, когда ваше приложение запускается для " опасных действий ", таких как доступ к файловой системе или чтение контактов.На связанных страницах уже есть фрагмент кода, который вы можете скопировать.

На старых телефонах было достаточно запрашивать разрешения в манифесте, но целевая версия SDK была недавно повышена до 8.0 (= 26),Если вы хотите поддерживать устройства до 6.0, библиотека совместимости Android позволит вам вызывать тот же API.

...