我正在开发一个Webview应用程序。到目前为止,我已经设法在用户使用MediaStore.ACTION_IMAGE_CAPTURE
点击文件输入时直接打开相机。
但是,照相机动作会打开库存照相机应用程序,但不会在右下角显示现有的图像选择器。但是,当我从应用程序外部打开股票相机应用程序时,在右下角的快门按钮旁边的右下角有一个圆圈,上面有图像预览。
如何使该按钮也显示在我的应用中? 显然,我试图通过谷歌搜索找到它,但是我只能找到有关如何向用户显示对话框的提示,用户可以在其中从相机或图库中选择照片。但是,在相机动作中如何显示“从画廊中拾取”按钮没有任何意义。 如果有人能指出我正确的方向,那将不胜感激:)
这是我使用的完整方法:
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
}
答案 0 :(得分:0)
但是,照相机动作会打开库存照相机应用程序,但不会在右下角显示现有的图像选择器。
大约有26,000个Android设备型号。这些附带了数百种不同的“库存”相机应用程序。您的ACTION_IMAGE_CAPTURE
Intent
可能会启动其中任何一个,也可能启动用户可能已从Play商店或其他地方安装的数百种其他相机应用中的任何一个。
在任何情况下,都不必拥有“右下角的现有图像选择器”。
如何使该按钮也显示在我的应用中?
你没有。
大概是,该相机应用程序的开发人员决定不为ACTION_IMAGE_CAPTURE
提供该选项。例如,也许他们构建该功能的方式会破坏其属性的能力,从而将结果返回给与startActivityForResult()
一起使用的ACTION_IMAGE_CAPTURE
调用。那是他们的决定,就像他们的相机应用一样。