Chromium WebView 中的 WebRTC 错误:"CheckMediaAccessPermission: Not supported"

WebRTC error inside Chromium WebView: "CheckMediaAccessPermission: Not supported"

我正在尝试在 WebView 中显示 WebRTC 聊天。 根据this documentationWebView v36支持WebRTC。对于我的测试,我使用的是带有 Chrome/39.0.0.0 的设备,并且我已将权限添加到 AndroidManifest.xml 文件:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<user-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

但是当我进入聊天时,我看到一个 Chromium 错误日志 (设备不显示 \ 翻译任何东西,只有 'loading' 进度条):

W/AudioManagerAndroid: Requires MODIFY_AUDIO_SETTINGS and RECORD_AUDIO
W/AudioManagerAndroid: No audio device will be available for recording
E/chromium: [ERROR:web_contents_delegate.cc(178)] WebContentsDelegate::CheckMediaAccessPermission: Not supported.
E/chromium: [ERROR:web_contents_delegate.cc(178)] WebContentsDelegate::CheckMediaAccessPermission: Not supported.
W/AudioManagerAndroid: Requires MODIFY_AUDIO_SETTINGS and RECORD_AUDIO
W/AudioManagerAndroid: No audio device will be available for recording
D/ChromiumCameraInfo: Camera enumerated: front

在真实设备上测试,Android 5.1.1.

需要额外的权限请求

webView.setWebChromeClient(new WebChromeClient(){
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onPermissionRequest(final PermissionRequest request) {
                request.grant(request.getResources());
        }
    });

更新 但它不适用于音频捕获

UPDATE 发现有效 google-示例代码 here

您需要这些权限才能访问相机和麦克风

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

// don't miss this one
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

接下来您需要授予对您的网络视图的权限,查看此link了解更多详情:

webView.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onPermissionRequest(PermissionRequest request) {
            runOnUiThread(() -> {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    String[] PERMISSIONS = {
                            PermissionRequest.RESOURCE_AUDIO_CAPTURE,
                            PermissionRequest.RESOURCE_VIDEO_CAPTURE
                    };
                    request.grant(PERMISSIONS);
                }
            });
        }
    });

如果音频播放不工作,使用这个:

webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

主要是在webview重新加载时出错,因为当我们在webview上请求音频、摄像头权限时,接受权限后,我们需要刷新网页。

   if (permission.equals("android.webkit.resource.AUDIO_CAPTURE")) {
                        demandForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);
                    } else {
                        myRequest.grant(request.getResources());
                    }

我也遇到了这个问题很多天,但是在下面 link 代码之后,100% 工作代码 Android Webview