如何在Android Webview上禁用webRTC?

时间:2018-11-03 07:21:27

标签: java android webrtc

我正在开发VPN应用程序,需要在其中放置WebRTC支持菜单。 用户可以在其中启用和禁用该选项的位置。 但是我没有在我的应用程序中禁用它。 我不知道如何通过代码禁用它。

这是代码,请检查并告诉我如何解决此问题。

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

mWebView.setWebChromeClient(null);

1 个答案:

答案 0 :(得分:1)

权限

如果您不想注入JS,我认为您的解决方案还差得远。只需一点状态管理就可以帮助您。

您需要在编译时进行AndroidManifiedt和Android权限检查,并在用户使用您的应用程序的第一个运行时进行检查,因为您希望允许用户在体验期间专门动态地允许/拒绝此功能。并非经常摆弄Android应用程序设置/权限。往返于设置将是非常乏味的。我还假定您要避免这种UX。

因此,您应该在每次触发时对WebChromeClients onPermissionRequest(基本上是您所拥有的)中的权限进行运行时检查。您可以使用状态变量或状态中存储的域白名单,以允许用户允许限制此功能,甚至将其锁定到特定域。您还可以专门检查RESOURCE_VIDEO_CAPTURE等。

作为示例,您可以在此处的GitHub示例中查看我如何进行域锁定:https://github.com/marcusbelcher/android-getUserMedia-test参见第106和116行。您可以在此处使用变量/状态逻辑来阻止特定请求。当有人触发getUserMedia时,这是每个会话的请求。

这是运行时唯一可以拒绝/允许的位置。更多信息在这里:

https://github.com/googlesamples/android-PermissionRequest

https://developer.android.com/reference/android/webkit/PermissionRequest

JS覆盖

如果您可以/想要注入JS,则可以通过navigator.mediaDevices.getUserMedia = undefined在DOM中注入并覆盖getUserMedia。您可以临时移动参考window.t = navigator.mediaDevices.getUserMedia; navigator.mediaDevices.getUserMedia = null;,并在需要时将其反转。

更多信息在这里:

Android webview, loading javascript file in assets folder

https://medium.com/appunite-edu-collection/webview-with-injected-js-script-13eb1e0257c9