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

Developer-H 2024-08-08 14:03:01 阅读 83

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

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

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

<code> 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授权检查

override fun onPermissionRequest(request: PermissionRequest?) {

try {

if (request != null) {

if( !request.resources.contains(PermissionRequest.RESOURCE_AUDIO_CAPTURE)) return

if(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中的摄像头错误(相机允许不工作)

的相关解决思路。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。