WebView加载h5页面弹窗无法显示问题和申请摄像头权限问题做个记录

参考文章:
WebView 加载H5页面空白问题
WebView使用getUserMedia

首先需要设置webview支持js,在Android 9.0后,访问地址如果是http开头的,还需要在配置文件里设置允许http访问:android:usesCleartextTraffic=“true”
webview基础设置:

WebSettings webSettings=mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);//允许使用js
webSettings.setDomStorageEnabled(true);
webSettings.setSupportMultipleWindows(true);//允许开发多个窗口      webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //设置允许JS弹窗

先介绍WebViewClient与WebChromeClient区别
使用WebView基本都会使用这两个类,那他们有哪些区别呢?
WebViewClient主要帮助WebView处理各种通知、请求事件的,有以下常用方法:
1.onPageFinished 页面请求完成
2.onPageStarted 页面开始加载
3.shouldOverrideUrlLoading 拦截url
4.onReceivedError 访问错误时回调,例如访问网页时报错404,在这个方法回调的时候可以加载错误页面。
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等,有以下常用方法。
1.onJsAlert webview不支持js的alert弹窗,需要自己监听然后通过2.dialog弹窗
3.onReceivedTitle 获取网页标题
4.onReceivedIcon 获取网页icon
5.onProgressChanged 加载进度回调
所以要解决弹窗无法显示问题需要重写WebChromeClient,这样加上基础的设置就可以显示JS 的Alert

mWebView.setWebChromeClient(new WebChromeClient());

webView获取权限问题
试过在程序上动态赋予摄像头权限后,开启网页调用摄像头还是会提示权限被拒绝,原因是Android 浏览器上回调默认是拒绝的,还是需要重webChromeClient里面的方法,手动赋予,或者自定义dialog提示用户是否授权,在这里我就直接给它授权了

private WebChromeClient mWebChromeClient = new WebChromeClient(){
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            result.confirm();
            return true;
        }

        @Override
        public void onPermissionRequest(PermissionRequest request) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                request.grant(request.getResources());
                request.getOrigin();
            }
        }
    };

这样就可以了,原先以为程序上赋予权限就可以调用摄像头了,原来通过浏览器访问摄像头,同样也要申请权限,两者还不一样,记录一下。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值