X5内核使用webrtc——默认允许摄像头和麦克风权限

 

 

当浏览器需要摄像头或者麦克风时,都会弹出确认摄像头和麦克风权限弹框
小编最近在做webrtc的项目,用的是内嵌的X5内核的webview进行语音视频通话,但每次启动app都会弹出权限对话框,原本想在js上解决这个问题,结果是没法解决,因为这对于浏览器来说是一个安全性的问题,防止访问网页时,在不知名的情况下摄像头被打开,涉及到隐私的问题,所以只能在webview中想办法。

原生的webview在6.0以上是有具体的api可以直接去掉,小编用的webrtc在5.0以下,原生webview是无法使用的,所以只能用X5的webview,看完官方api以后,并没找到具体的方法,只能试下向官方反馈了。

说实话,官方还是很给力的,过不了多久就用QQ把解决方法发给我了

下面是官方文档的截图:

 

webview_calling.setWebChromeClientExtension(new IX5WebChromeClientExtension() {
    @Override
    public Object getX5WebChromeClientInstance() {
        return null;
    }

    @Override
    public View getVideoLoadingProgressView() {
        return null;
    }

    @Override
    public void onAllMetaDataFinished(IX5WebViewExtension ix5WebViewExtension, HashMap<String, String> hashMap) {

    }

    @Override
    public void onBackforwardFinished(int i) {

    }

    @Override
    public void onHitTestResultForPluginFinished(IX5WebViewExtension ix5WebViewExtension, IX5WebViewBase.HitTestResult hitTestResult, Bundle bundle) {

    }

    @Override
    public void onHitTestResultFinished(IX5WebViewExtension ix5WebViewExtension, IX5WebViewBase.HitTestResult hitTestResult) {

    }

    @Override
    public void onPromptScaleSaved(IX5WebViewExtension ix5WebViewExtension) {

    }

    @Override
    public void onPromptNotScalable(IX5WebViewExtension ix5WebViewExtension) {

    }

    @Override
    public boolean onAddFavorite(IX5WebViewExtension ix5WebViewExtension, String s, String s1, JsResult jsResult) {
        return false;
    }

    @Override
    public void onPrepareX5ReadPageDataFinished(IX5WebViewExtension ix5WebViewExtension, HashMap<String, String> hashMap) {

    }

    @Override
    public boolean onSavePassword(String s, String s1, String s2, boolean b, Message message) {
        return false;
    }

    @Override
    public boolean onSavePassword(ValueCallback<String> valueCallback, String s, String s1, String s2, String s3, String s4, boolean b) {
        return false;
    }

    @Override
    public void onX5ReadModeAvailableChecked(HashMap<String, String> hashMap) {

    }

    @Override
    public void addFlashView(View view, ViewGroup.LayoutParams layoutParams) {

    }

    @Override
    public void h5videoRequestFullScreen(String s) {

    }

    @Override
    public void h5videoExitFullScreen(String s) {

    }

    @Override
    public void requestFullScreenFlash() {

    }

    @Override
    public void exitFullScreenFlash() {

    }

    @Override
    public void jsRequestFullScreen() {

    }

    @Override
    public void jsExitFullScreen() {

    }

    @Override
    public void acquireWakeLock() {

    }

    @Override
    public void releaseWakeLock() {

    }

    @Override
    public Context getApplicationContex() {
        return null;
    }

    @Override
    public boolean onPageNotResponding(Runnable runnable) {
        return false;
    }

    @Override
    public Object onMiscCallBack(String s, Bundle bundle) {
        return null;
    }

    @Override
    public void openFileChooser(ValueCallback<Uri[]> valueCallback, String s, String s1) {

    }

    @Override
    public void onPrintPage() {

    }

    @Override
    public void onColorModeChanged(long l) {

    }

    @Override
    public boolean onPermissionRequest(String s, long l, MediaAccessPermissionsCallback mediaAccessPermissionsCallback) {
        long allowed = 0;
        allowed = allowed | MediaAccessPermissionsCallback.ALLOW_AUDIO_CAPTURE;
        boolean retain = true;
        mediaAccessPermissionsCallback.invoke(s, allowed,retain);
        return true;
    }
});

 

在IX5WebChromeClientExtension重写方法onPermissionRequest里面实现默认允许

 

总感觉大家也会遇到这种问题,向大家分享下,小编这边只在5.0以下试过是没问题的,高版本的不太确定,大家可以试试

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要在WebRTC中切换手机摄像头,你可以使用JavaScript编写以下代码: 首先,通过`getUserMedia`方法获取用户媒体设备(即摄像头麦克风)的访问权限: ```javascript navigator.mediaDevices.getUserMedia({ video: true, audio: true }) .then(function(stream) { // 获取到了媒体流,可以进行后续操作 }) .catch(function(error) { // 发生错误,处理错误情况 console.log('getUserMedia error: ', error); }); ``` 接下来,你可以使用`MediaStreamTrack.getSources()`方法获取所有可用的媒体源,包括摄像头麦克风: ```javascript MediaStreamTrack.getSources(function(sourceInfos) { var videoSources = []; for (var i = 0; i !== sourceInfos.length; ++i) { var sourceInfo = sourceInfos[i]; if (sourceInfo.kind === 'video') { videoSources.push(sourceInfo); } } // videoSources数组中包含了所有可用的摄像头 }); ``` 一旦你获得了可用的摄像头列表,你可以使用`MediaStreamTrack.applyConstraints()`方法来切换摄像头: ```javascript var videoTrack = stream.getVideoTracks()[0]; // 获取当前使用摄像头轨道 // 通过切换设备ID来切换摄像头 var constraints = { video: { deviceId: { exact: videoSources[1].deviceId } } }; videoTrack.applyConstraints(constraints) .then(function() { // 摄像头切换成功 }) .catch(function(error) { // 摄像头切换失败,处理错误情况 console.log('applyConstraints error: ', error); }); ``` 在上述代码中,`videoSources[1].deviceId`是你要切换到的摄像头的设备ID。你可以根据需要修改该值。 注意:由于WebRTC的浏览器兼容性问题,上述代码在某些浏览器中可能无法正常工作。你可以使用适当的浏览器前缀或使用第三方库(如adapter.js)来处理兼容性问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值