我如何使用 ActivityResultLauncher.GetContent() 请求多个 MIME 类型?
How can i ask for multpile MIME types with ActivityResultLauncher.GetContent()?
我正在尝试使用
从用户那里检索一个既可以是图像也可以是 pdf 的文件
registerForActivityResult(ActivityResultContracts.GetContent()) { file: Uri ->
......
}.launch(<mimetypes>)
我已经尝试 "image/*|application/pdf"
从另一个问题的答案,但它没有用,有什么方法可以在使用 registerForActivityResult 时请求多个 MIME 类型?
is there any way to ask for multiple MIME types when using registerForActivityResult ?
不直接用当前版本ActivityResultContracts.GetContent
。但是,您应该能够对其进行子类化,覆盖 createIntent()
,并从那里自定义生成的 Intent
。然后,您可以尝试将 EXTRA_MIME_TYPES
添加到那个 Intent
以及 String[]
您想要的其他 MIME 类型。
这是我的示例代码,在 api 31
中测试过
var resultGalleryLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val intent: Intent? = result.data
if (intent != null) {
intent.data?.let { selectedImageUri ->
....
}
}
} else {
Timber.e(" >>> error selected image from gallery by intent")
}
}
}
fun galleryLauncher() {
val intent = Intent(Intent.ACTION_GET_CONTENT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI).apply {
type = "image/*"
action = Intent.ACTION_GET_CONTENT
putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/jpeg", "image/png", "image/jpg"))
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
}
resultGalleryLauncher.launch(intent)
}
我正在尝试使用
从用户那里检索一个既可以是图像也可以是 pdf 的文件registerForActivityResult(ActivityResultContracts.GetContent()) { file: Uri ->
......
}.launch(<mimetypes>)
我已经尝试 "image/*|application/pdf"
从另一个问题的答案,但它没有用,有什么方法可以在使用 registerForActivityResult 时请求多个 MIME 类型?
is there any way to ask for multiple MIME types when using registerForActivityResult ?
不直接用当前版本ActivityResultContracts.GetContent
。但是,您应该能够对其进行子类化,覆盖 createIntent()
,并从那里自定义生成的 Intent
。然后,您可以尝试将 EXTRA_MIME_TYPES
添加到那个 Intent
以及 String[]
您想要的其他 MIME 类型。
这是我的示例代码,在 api 31
中测试过var resultGalleryLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val intent: Intent? = result.data
if (intent != null) {
intent.data?.let { selectedImageUri ->
....
}
}
} else {
Timber.e(" >>> error selected image from gallery by intent")
}
}
}
fun galleryLauncher() {
val intent = Intent(Intent.ACTION_GET_CONTENT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI).apply {
type = "image/*"
action = Intent.ACTION_GET_CONTENT
putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/jpeg", "image/png", "image/jpg"))
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
}
resultGalleryLauncher.launch(intent)
}