我正在开发VPN应用程序,需要在其中放置WebRTC支持菜单。 用户可以在其中启用和禁用该选项的位置。 但是我没有在我的应用程序中禁用它。 我不知道如何通过代码禁用它。
这是代码,请检查并告诉我如何解决此问题。
mWebView.setWebChromeClient(new WebChromeClient(){
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onPermissionRequest(final PermissionRequest request) {
request.deny();
}
});
或
mWebView.setWebChromeClient(null);
答案 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