0


H5在Android在Webview中申请语音、相机等资源权限

记录关于H5在Android的webView中申请语音、相机等资源权限开发过程

1、申请权限的JavaScript端(Vue)

这里申请权限时一直走了catch异常,提示语音权限禁止获取。

if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia){// 请求麦克风权限
      navigator.mediaDevices
        .getUserMedia({audio:true}).then(function(stream){
          console.log('录音权限已获取')}).catch(function(err){// 用户拒绝或者发生错误
          console.log('无法获取录音权限:', err)})}

2、Android端的 Webview授权(Kotlint)

这里使用AgentWeb做为Webview框架,可参考:github地址,gitee地址

       webViewAgentWeb = AgentWeb.with(this).setAgentWebParent(webViewContainer,-1, LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)).useDefaultIndicator(ContextCompat.getColor(this, R.color.light_blue),3).setSecurityType(AgentWeb.SecurityType.STRICT_CHECK).setMainFrameErrorView(R.layout.agentweb_error_page,-1).setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.DISALLOW).setWebChromeClient(object:WebChromeClient(){// H5授权检查overridefunonPermissionRequest(request: PermissionRequest?){try{if(request !=null){if(!request.resources.contains(PermissionRequest.RESOURCE_AUDIO_CAPTURE))returnif(allPermissionsGranted()){//允许H5申请资源权限
                                request.grant(request.resources)//如果需要限制H5资源申请的权限类型,则使用For循环进行检查授权即可//                                for (r in request.resources){//                                    if (r == PermissionRequest.RESOURCE_AUDIO_CAPTURE){//                                        request.grant(arrayOf(PermissionRequest.RESOURCE_AUDIO_CAPTURE))//                                    }//                                    break//                                }}else{requestPermissions()}}}catch(e:Exception){
                        Log.d("WebView","onPermissionRequest / Exception: ${e} ")return}}}).interceptUnkownUrl().createAgentWeb().ready().go(url)

3、报错问题:如果H5端申请资源权限时 ,出现Android端一直报错如下:

:java.lang.IllegalStateException: Either grant() or deny() has been already called.

则说明在onPermissionRequest中使用了类继承方法导致的,注销掉 super.onPermissionRequest(request) 即可,如下:

//    super.onPermissionRequest(request) //调用父类(超类)中同名方法的一个实例 | 不使用这个,因为这里是继承onPermissionRequest,会导致无法再次调用grant进行授权的问题发生

参考:Android : WebView中的摄像头错误(相机允许不工作) 的相关解决思路。


本文转载自: https://blog.csdn.net/qq_39516382/article/details/140014843
版权归原作者 Developer-H 所有, 如有侵权,请联系我们删除。

“H5在Android在Webview中申请语音、相机等资源权限”的评论:

还没有评论