相机动作意图中没有图库按钮
No gallery button in camera action intent
我正在开发一个 webview 应用程序。到目前为止,我已经设法在用户点击文件输入时直接打开相机,使用 MediaStore.ACTION_IMAGE_CAPTURE
。
但是,相机操作会打开库存相机应用,但不会在右下角显示现有的图像选择器。然而,当我从我的应用程序外部打开库存相机应用程序时,右下角有一个圆圈,带有图像预览,就在快门按钮旁边。
如何让这个按钮也显示在我的应用程序中?
显然我试图通过谷歌搜索找到它,但我只能找到关于如何向用户显示一个对话框的答案,他们可以在其中从相机或图库中挑选照片。但是没有关于如何在相机动作中显示 "pick from gallery" 按钮的内容。
如果有人能指出我正确的方向,将不胜感激:)
这是我正在使用的完整方法:
override fun onShowFileChooser(
webView: WebView?,
filePathCallback: ValueCallback<Array<Uri>>?,
fileChooserParams: WebChromeClient.FileChooserParams?
): Boolean {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// Double check that we don't have any existing callbacks
this@WebClient.filePathCallback?.onReceiveValue(null)
this@WebClient.filePathCallback = filePathCallback
if (takePictureIntent.resolveActivity(activity.packageManager) != null) {
// create file where image should go
var photoFile: File? = null
try {
photoFile = createImageFile()
takePictureIntent.putExtra("PhotoPath", cameraPhotoPath)
} catch (exception: IOException) {
Log.e("imageError", "Unable to create image file", exception)
}
if (photoFile != null) {
cameraPhotoPath = "file:${photoFile.absolutePath}"
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile))
}
}
val contentSelectionIntent = Intent(Intent.ACTION_CHOOSER).apply {
addCategory(Intent.CATEGORY_OPENABLE)
this.type = "image/*"
}
val chooserIntent = Intent(Intent.ACTION_CHOOSER).apply {
putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(takePictureIntent))
}
activity.startActivityForResult(chooserIntent, inputFileRequestCode)
return true
}
However, the camera action opens the stock camera app, but does not show the existing image picker in the bottom right.
大约有 26,000 Android 种设备型号。它们附带数百种不同的 "stock" 相机应用程序。您的 ACTION_IMAGE_CAPTURE
Intent
可能会启动这些应用中的任何一个,或者用户可能从 Play 商店或其他地方安装的数百个其他相机应用中的任何一个。
None 在任何情况下都必须有一个 "existing image picker in the bottom right"。
How can I get this button to show up in my app as well?
你不知道。
据推测,该相机应用程序的开发人员决定不为 ACTION_IMAGE_CAPTURE
提供该选项。例如,他们构建该功能的方式可能会破坏他们 属性 return 与 ACTION_IMAGE_CAPTURE
一起使用的 startActivityForResult()
调用的结果的能力。这是他们的决定,因为这是他们的相机应用程序。
我正在开发一个 webview 应用程序。到目前为止,我已经设法在用户点击文件输入时直接打开相机,使用 MediaStore.ACTION_IMAGE_CAPTURE
。
但是,相机操作会打开库存相机应用,但不会在右下角显示现有的图像选择器。然而,当我从我的应用程序外部打开库存相机应用程序时,右下角有一个圆圈,带有图像预览,就在快门按钮旁边。
如何让这个按钮也显示在我的应用程序中? 显然我试图通过谷歌搜索找到它,但我只能找到关于如何向用户显示一个对话框的答案,他们可以在其中从相机或图库中挑选照片。但是没有关于如何在相机动作中显示 "pick from gallery" 按钮的内容。 如果有人能指出我正确的方向,将不胜感激:)
这是我正在使用的完整方法:
override fun onShowFileChooser(
webView: WebView?,
filePathCallback: ValueCallback<Array<Uri>>?,
fileChooserParams: WebChromeClient.FileChooserParams?
): Boolean {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// Double check that we don't have any existing callbacks
this@WebClient.filePathCallback?.onReceiveValue(null)
this@WebClient.filePathCallback = filePathCallback
if (takePictureIntent.resolveActivity(activity.packageManager) != null) {
// create file where image should go
var photoFile: File? = null
try {
photoFile = createImageFile()
takePictureIntent.putExtra("PhotoPath", cameraPhotoPath)
} catch (exception: IOException) {
Log.e("imageError", "Unable to create image file", exception)
}
if (photoFile != null) {
cameraPhotoPath = "file:${photoFile.absolutePath}"
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile))
}
}
val contentSelectionIntent = Intent(Intent.ACTION_CHOOSER).apply {
addCategory(Intent.CATEGORY_OPENABLE)
this.type = "image/*"
}
val chooserIntent = Intent(Intent.ACTION_CHOOSER).apply {
putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(takePictureIntent))
}
activity.startActivityForResult(chooserIntent, inputFileRequestCode)
return true
}
However, the camera action opens the stock camera app, but does not show the existing image picker in the bottom right.
大约有 26,000 Android 种设备型号。它们附带数百种不同的 "stock" 相机应用程序。您的 ACTION_IMAGE_CAPTURE
Intent
可能会启动这些应用中的任何一个,或者用户可能从 Play 商店或其他地方安装的数百个其他相机应用中的任何一个。
None 在任何情况下都必须有一个 "existing image picker in the bottom right"。
How can I get this button to show up in my app as well?
你不知道。
据推测,该相机应用程序的开发人员决定不为 ACTION_IMAGE_CAPTURE
提供该选项。例如,他们构建该功能的方式可能会破坏他们 属性 return 与 ACTION_IMAGE_CAPTURE
一起使用的 startActivityForResult()
调用的结果的能力。这是他们的决定,因为这是他们的相机应用程序。