我正在使用WebView加载一个具有视频通话功能的URL。当我尝试发起视频通话时,会出现以下错误:"Permission denied. Please refresh the page and allow access to your camera and microphone"。
如果我给予Android运行时权限-相机和录音。那么视频通话将被启动并且视频也将传输到计算机上。但在移动端,我无法查看自己的视频以及接收者的视频。它只显示getDefaultVideoPoster()。
我已经尝试使用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();
}
}
}
});