Поскольку мое приложение нацелено на API> 24, мне нужно использовать FileProvider для обработки файлов / Uris.
В этом сценарии пользователь может выбрать мультимедийный файл (видео или изображение) следующим образом:
val intent = Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
)
intent.type = "image/* video/*"
startActivityForResult(intent, MEDIA_PICKED)
Отсюда я собираю Uri и сохраняю его как строку. Позже пользователь может открыть носитель, вызвав такое намерение, как:
val intent = Intent(Intent.ACTION_VIEW, fileUri)
intent.setDataAndType(fileUri, "video/*")
startActivity(intent)
Однако я получаю сообщение об ошибке, потому что Uri должен быть сгенерирован через FileProvider начиная с API 24. Итак, после прочтения документации и несколько примеров, у меня проблема с provider_paths. xml, в качестве примера из документации:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="my_images" path="images/"/>
...
</paths>
Но, поскольку пользователь выбрал любой носитель на телефоне, я понятия не имею, что это за * Значения 1012 * name и path будут в моих provider_paths. Это зависит от телефона к телефону, и пользователи могут загружать видео с камеры из DCIM или загруженное видео из загрузок. В каждом примере я вижу, что пользователи что-то хранят в своем каталоге, например ExternalStorage + «my_app» + «имя_файла», чтобы они знали путь и имя своего каталога. Но как я могу использовать свой FileProvider, чтобы превратить файлы в действительные URI, если у меня нет этих файлов в известной папке хранения?