Как сохранить видео из MediaStore на Android Q

#android #mediastore #android-10.0

#Android #mediastore #android-10.0

Вопрос:

Я пишу эту функцию для вставки видеофайла:

 @RequiresApi(Build.VERSION_CODES.Q)
private fun String.insertQ(url: Uri, bucketName: String, subDir: String): Uri? {
    return contentResolver.insert(url, contentValuesOf(
            MediaStore.MediaColumns.DISPLAY_NAME to this,
            MediaStore.MediaColumns.MIME_TYPE to URLConnection.guessContentTypeFromName(this),
            MediaStore.MediaColumns.RELATIVE_PATH to "$bucketName/$subDir",
            MediaStore.MediaColumns.DATE_MODIFIED to System.currentTimeMillis() / 1000
    ))
}
  

Я хочу загрузить видео и вывести видео в uri, созданный с помощью функции выше. Код выполняется без исключений, но видео не имеет длительности, оно равно 0 после запроса.

В этом случае я не могу узнать продолжительность видео при вставке.

Google говорит об этом:

MediaStore.MediaColumns.ДЛИТЕЛЬНОСТЬ доступна только для чтения и не может быть изменена.

Поэтому я не могу обновить этот столбец вручную после загрузки.

Наконец, я обнаружил, что этот код работает для обновления продолжительности:

 fun Uri.notifyMediaScanner() {
    application.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE).apply {
        data = this@notifyMediaScanner.toFileUri()
    })
}
  

То, что меня смутило, — это документация Intent.ACTION_MEDIA_SCANNER_SCAN_FILE , которая пишет это:

Абонентам следует перейти на вставку элементов непосредственно в {@link MediaStore}, где они будут автоматически сканироваться после каждой мутации.

Похоже, мне не нужно вызывать функцию notifyMediaScanner после загрузки.

Итак, есть ли правильный способ сохранить видео в MediaStore?

Комментарии:

1. but the video has no duration time, it is 0 after query. Пожалуйста, укажите также размер файла.

2. Размер файла невелик, это небольшое видео. Размер около 2 МБ