#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 МБ