我已经实现了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
}
}
1条答案
按热度按时间f0brbegy1#
在本节的文档之后,您可以找到一个小段落,解释何时以及为什么自动调用Intent
ACTION_OPEN_DOCUMENT
。如果照片选取器在设备上不可用,图库会自动调用ACTION_OPEN_DOCUMENT Intent操作。运行Android 4.4(API级别19)或更高版本的设备支持此Intent。您可以通过调用isPhotoPickerAvailable()来验证照片选取器在给定设备上是否可用。
向下滚动文档到设备可用性部分将为您提供更详细的说明以及如何解决您的问题:
照片选取器适用于满足以下条件的设备:
运行Android 4.4(API级别19)至Android 10(API级别29)的较旧设备以及运行Android 11或12并支持Google Play服务的Android Go设备可以安装照片选取器的后移植版本。