Android照片选取器库在Android 11和12上无法打开图库

1dkrff03  于 2023-10-14  发布在  Android
关注(0)|答案(1)|浏览(272)

我已经实现了documentation中描述的Android照片选取器库,但在运行Android 11和12(API 30和31)的Android设备上,该库会自动调用ACTION_OPEN_DOCUMENT intent操作,而不是图库。
代码:

private lateinit var pickMultipleMediaLauncher: ActivityResultLauncher<PickVisualMediaRequest>

在多选模式下注册照片选取器Activity启动器。

private fun registerPhotoPicker() {
        pickMultipleMediaLauncher =
            registerForActivityResult(PickMultipleVisualMedia(imageSelectionLimitCount)) { uris ->
                uris.forEach {
                        getRealPathFromMediaURI(it)?.let { imagePath -> imagesPath.add(imagePath) }
                }
            }
    }

启动照片选取器

pickMultipleMediaLauncher.launch(PickVisualMediaRequest.Builder().build())

从媒体URI获取真实的路径

fun getRealPathFromMediaURI(uri: Uri): String? {
        val projection = arrayOf(MediaStore.MediaColumns.DATA)
        val cursor = context.contentResolver.query(uri, projection, null, null, null)
        val columnIndex = cursor?.getColumnIndex(MediaStore.MediaColumns.DATA)

        return try {
            if (cursor != null) {
                cursor.moveToFirst()
                val filePath = columnIndex?.let { cursor.getString(it) }
                cursor.close()
                filePath
            } else null
        } catch (exception: Exception) {
            null
        }
    }
f0brbegy

f0brbegy1#

在本节的文档之后,您可以找到一个小段落,解释何时以及为什么自动调用Intent ACTION_OPEN_DOCUMENT

如果照片选取器在设备上不可用,图库会自动调用ACTION_OPEN_DOCUMENT Intent操作。运行Android 4.4(API级别19)或更高版本的设备支持此Intent。您可以通过调用isPhotoPickerAvailable()来验证照片选取器在给定设备上是否可用。

向下滚动文档到设备可用性部分将为您提供更详细的说明以及如何解决您的问题:
照片选取器适用于满足以下条件的设备:

  • 运行Android 11(API level 30)或更高版本
  • 通过Google系统更新接收模块化系统组件的更改

运行Android 4.4(API级别19)至Android 10(API级别29)的较旧设备以及运行Android 11或12并支持Google Play服务的Android Go设备可以安装照片选取器的后移植版本。

相关问题