Chromium WebView 中的 WebRTC 错误:"CheckMediaAccessPermission: Not supported"
WebRTC error inside Chromium WebView: "CheckMediaAccessPermission: Not supported"
我正在尝试在 WebView
中显示 WebRTC
聊天。
根据this documentation,WebView 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
我正在尝试在 WebView
中显示 WebRTC
聊天。
根据this documentation,WebView 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