Проблема с выбором видео из галереи в Android 10 / Q - PullRequest
1 голос
/ 05 августа 2020

У меня проблемы с выбором видео из галереи в Android 10. Я получаю Uri от выбора видео, но не знаю, как go использовать этот Uri в onActivityResult с contentProvider для получения видео, которое выбрал пользователь.

    fun loadVideoFromGallery(): Intent {
        return Intent(
            Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI
        ).apply {
            type = "video/*"
        }
    }

Вот Uri, который я получаю в onActivityResult (data? .data):

content: // com. google. android .apps.photos.contentprovider / -1 / 2 / content% 3A% 2F% 2Fmedia% 2Fexternal% 2Fvideo% 2Fmedia% 2F28 / ORIGINAL / NONE / 1128816056

Я могу для циклического просмотра

while (cursor.moveToNext ())

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

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (resultCode == Activity.RESULT_OK && null != data) {
        val selectedVideoUri = date?.data
        if (selectedVideoUri != null) {
            val projection = arrayOf(
                        MediaStore.Video.Media._ID
                    )
            val selection: String? = null
            val selectionArgs: Array<String>? = null
            contentResolver.query(
                MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                projection,
                selection,
                selectionArgs,
                null
            )?.use { cursor ->
                try {
                    val idColumn =
                            cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID)
                    while (cursor.moveToNext()) {
                        val id = cursor.getLong(idColumn)
                        val contentUri: Uri = ContentUris.withAppendedId(
                            MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id
                        )
                        val thumb = contentResolver.loadThumbnail(
                            contentUri, Size(imageView.width, imageView.height), null
                        )
                        imageView.setImageBitmap(thumb)
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }
        }
    }
}

Как видите, я перебираю элементы внутри каталога MediaStore.Video.Media.EXTERNAL_CONTENT_URI, но imageView.setImageBitmap (thumb) с постоянной настройкой последнего элемента, который он проходит.

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

1 Ответ

0 голосов
/ 05 августа 2020
  imageView.setImageUri(data.getData());
...