Как я могу использовать постоянный URI с приложениями, которые не поддерживают ACTION_OPEN_DOCUMENT - PullRequest
0 голосов
/ 03 декабря 2018

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

Я прочитал различные посты и документы об использовании ACTION_OPEN_DOCUMENT на начальном этапе, предоставляя соответствующие разрешения URI, а затем используя takePersistableUriPermission для распознавателя.

Все это прекрасно работает.Проблема в том, что в мире существует много приложений, которые управляют выбором медиа, которые не поддерживают ACTION_OPEN_DOCUMENT, но поддерживают ACTION_GET_CONTENT.

Что я хочу сделать:

  1. Предоставьте список приложений, чтобы пользователь мог выбрать, какое из них он загрузил, и которое может найти медиафайлы для них, которые он хочет использовать в моем приложении.
  2. Используйте выбранное приложение, чтобы выбратьmedia.
  3. Сохраните URI этого носителя в БД, чтобы я мог использовать его позже.

Это прекрасно работает при реализации первоначального намерения выбрать приложение для поиска, чтобы найтиноситель ACTION_OPEN_DOCUMENT.

У меня нет необходимости выполнять запись на носитель - просто откройте выделение (и используйте полученные URI, выбранные пользователем) и сохраните этот URI для последующего использования.

Как можно сократить разрыв в необходимости постоянного URI с приложениями, которые не поддерживают намерение ACTION_OPEN_DOCUMENT?

1 Ответ

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

Если вы хотите использовать ACTION_GET_CONTENT:

Шаг # 1: Сделайте копию данных в некоторый файл, которым вы управляете (откройте InputStream в содержимом и скопируйте байты в FileOutputStream)

Шаг # 2: Сохраните Uri, который указывает на вашу копию данных

Другими словами, нет гарантии, что Uri, что вы получите отACTION_GET_CONTENT будет полезен через пять минут, не говоря уже о пяти часах, пяти днях, пяти неделях и т. Д.

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

...