val PICK_VIDEO_REQUEST_CODE = 1001
val RECORD_VIDEO_REQUEST_CODE = 2002
var mUploadMessages: ValueCallback<Array<Uri>>? = null
webView.webChromeClient = object : WebChromeClient() {
override fun onShowFileChooser(
filePathCallback: ValueCallback<Array<Uri>>?,
fileChooserParams: FileChooserParams
recordVideo(filePathCallback)
private fun pickVideo(filePathCallback: ValueCallback<Array<Uri>>?) {
mUploadMessages = filePathCallback
Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
chooserIntent.type = "video/*"
startActivityForResult(chooserIntent, PICK_VIDEO_REQUEST_CODE)
private fun recordVideo(filePathCallback: ValueCallback<Array<Uri>>?) {
mUploadMessages = filePathCallback
val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.putExtra("android.intent.extras.CAMERA_FACING", 1)
startActivityForResult(intent, RECORD_VIDEO_REQUEST_CODE)
} catch (e: Exception) {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode != RESULT_OK || data == null || data.data == null) {
mUploadMessages?.onReceiveValue(null)
PICK_VIDEO_REQUEST_CODE -> {
mUploadMessages?.onReceiveValue(
WebChromeClient.FileChooserParams.parseResult(resultCode, data)
RECORD_VIDEO_REQUEST_CODE -> {
val uris = data.data?.let { arrayOf(it) }
mUploadMessages?.onReceiveValue(uris)