Запрос общего файла

Когда приложение (клиент) хочет получить общий файл другого приложения (сервер), оно отправляет ему запрос. В большинстве случаев, в ответ на запрос приложение открывает явление для выбора доступных файлов. Пользователь выбирает файл, после чего серверное приложение отправляет URI файла клиентскому приложению.

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

Отправка запрошенного файла

Чтобы запросить файл, клиентское приложение вызывает startActivityForResult и передает намерение, содержащее действие ACTION_PICK и MIME тип, который приложение может принять.

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

Доступ к запрошенному файлу

Серверное приложение возвращает URI файла клиенту внутри намерения. Клиентское приложение может принять это намерение в методе onActivityResult(). После получения URI, клиентское приложение может открыть файл, получив файловый дескриптор – объект типа FileDescriptor.

Безопасность файла сохраняется, поскольку URI это только часть информации, которую получает клиентское приложение. URI не включает путь до каталога, поэтому клиентское приложение не может просматривать какие-либо другие файлы. Доступ к файлу получает конкретное клиентское приложение, и оно может делать с файлами только то, что позволяет серверное приложение. Разрешения являются временными, после его обработки клиентским приложением, файл вновь становится доступным только для серверного приложения.

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

Метод openFileDescriptor() возвращает объект типа ParcelFileDescriptor для файла. Из этого объекта клиентское приложение получает файловый дескриптор FileDescriptor, с помощью которого можно прочитать файл.

Добавить комментарий