Kotlin как получить и открыть видео - PullRequest
1 голос
/ 13 февраля 2020

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

Моя функция, чтобы получить все видео. Он хорошо работает, но возвращаемый Uri похож на 'content: // ...', я не знаю, верно ли это или это должно быть что-то вроде 'file: //...'

private val videos = mutableListOf<Uri>()

private fun getAllVideos() {
    val uriExternal = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
    val projection = arrayOf(MediaStore.Video.Media._ID)

    contentResolver.query(uriExternal, projection, null, null, null)?.use { cursor ->
        while (cursor.moveToNext()) {
            val videoUri = Uri.withAppendedPath(uriExternal, "" + cursor.getString(0))
            videos.add(videoUri)
        }
    }
}

Затем я пытаюсь открыть Uri, как это, но я всегда получаю сообщение об ошибке от игрока, и ничего не работает.

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = videos.first()
    type = "video/*"
}

startActivity(intent)

Я искал, но не нашел ни одного обновленного учебника, который не используйте «MediaStore.Video.Media.DATA» (сейчас не рекомендуется). Что-то я делаю не так?

1 Ответ

1 голос
/ 13 февраля 2020

но возвращаемый Uri похож на 'content: // ...', я не знаю, верно ли это

Да, это так.

Затем я пытаюсь открыть Uri, как это, но я всегда получаю сообщение об ошибке от игрока, и ничего не работает.

Сначала удалите type или используйте правильный MIME. тип. Не используйте подстановочный знак.

Во-вторых, добавьте FLAG_GRANT_READ_URI_PERMISSION к Intent. Без него у другого приложения нет прав доступа к контенту.

Кроме того, убедитесь, что вы только go через этот код, если в списке хотя бы один элемент, в противном случае ваш вызов first() выдаст исключение.

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