Android WebView尝试视频通话时出现权限被拒绝错误

3

我正在使用WebView加载一个具有视频通话功能的URL。当我尝试发起视频通话时,会出现以下错误:"Permission denied. Please refresh the page and allow access to your camera and microphone"。

Permission Denied

如果我给予Android运行时权限-相机和录音。那么视频通话将被启动并且视频也将传输到计算机上。但在移动端,我无法查看自己的视频以及接收者的视频。它只显示getDefaultVideoPoster()。

enter image description here

我已经尝试使用WebChromeClient和WebViewClient,但仍然没有成功。

以下是我的代码:

    private WebView webView;

    webView = findViewById(R.id.webview);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setSaveFormData(true);
    webSettings.setSupportZoom(false);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);


    webView.setWebViewClient(new MyWebViewClient());
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onPermissionRequest(final PermissionRequest request) {
            myRequest = request;

            for (String permission : request.getResources()) {
                switch (permission) {
                    case "android.webkit.resource.AUDIO_CAPTURE": {
                        askForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);
                        break;
                    }
                    case Manifest.permission.RECORD_AUDIO: {
                        askForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);
                        break;
                    }
                    case Manifest.permission.CAMERA: {
                        askForPermission(request.getOrigin().toString(), Manifest.permission.CAMERA, MY_PERMISSIONS_REQUEST_CAMERA);
                        break;
                    }
                }
            }
        }

        @Nullable
        @Override
        public Bitmap getDefaultVideoPoster() {
            Log.i(TAG, "getDefaultVideoPoster");
            return drawableToBitmap(getResources().getDrawable( R.drawable.ic_temperature));
            //return super.getDefaultVideoPoster();
        }

        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {
            super.onShowCustomView(view, callback);
            Log.i(TAG, "onShowCustomView");
            if (view instanceof FrameLayout){
                FrameLayout frame = (FrameLayout) view;
                if (frame.getFocusedChild() instanceof VideoView){
                    VideoView video = (VideoView) 
                    frame.getFocusedChild();
                    frame.removeView(video);
                    video.start();
                }
            }
        }
    });
2个回答

0
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

上述代码对我有效


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接