Allowing microphone access(permission) in WebView [Android Studio] [Java]

后端 未结 2 1956
说谎
说谎 2020-12-11 18:21

I am currently working on a music tuner that uses html5 and a webview to display the \'application\'. I\'ve written the all the permission required in manifest and I think f

2条回答
  •  一整个雨季
    2020-12-11 18:45

    Summarising, you need the following components:

    1. The MODIFY_AUDIO_SETTINGS permission.
    2. A WebChromeClient and listen to callbacks for onPermissionRequest
    3. Inside this callback, check for the the resources coming in the request object, create a global variable of this request object, iterate and look for specific permission inside the PermissionRequest class, ex. PermissionRequest.RESOURCE_VIDEO_CAPTURE which translates to the Manifest.permission.CAMERA permission, check if your app has this permission or not, using any mechanism you wish if not, request, if yes do 4.
    4. In the permission callback or if the permission is granted, use the request object to grant the permission ex. request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE}) and you're good to go.

    snippet:

    webView.webChromeClient = object: WebChromeClient(){
                override fun onPermissionRequest(request: PermissionRequest?) {
                    super.onPermissionRequest(request)
    
                    webkitPermissionRequest = request
    
                    request?.resources?.forEach {
                        when(it){
                            PermissionRequest.RESOURCE_AUDIO_CAPTURE-> {
                                askForWebkitPermission(it, Manifest.permission.RECORD_AUDIO, REQUEST_CODE_PERMISSION_AUDIO)
                            }
                            PermissionRequest.RESOURCE_VIDEO_CAPTURE->{
                                askForWebkitPermission(it, Manifest.permission.CAMERA, REQUEST_CODE_PERMISSION_CAMERA)
                            }
                        }
                    }
                }
            }
    
    private fun askForWebkitPermission(webkitPermission: String, androidPermission: String, requestCode: Int){
            val context = activity?: return
            if (context.hasPermission(androidPermission)){
                webkitPermissionRequest!!.grant(arrayOf(webkitPermission))
            }else{
                requestPermissions(arrayOf(androidPermission), requestCode)
            }
        }
    

    Hope this helps.

    Google's sample for the same: https://github.com/googlesamples/android-PermissionRequest

提交回复
热议问题