如何从 Webview 中访问相机?

新手上路,请多包涵

在我的 android 应用程序中,我试图在 WebView 上加载一个网页(必须访问相机)。在我的笔记本电脑上,当我加载网页时,我可以访问相机。

显示了 html 页面上的所有其他内容。

这是我在 Manifest.xml 中添加的许可

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

我将 SDK 设置如下:

 <uses-sdk
    android:minSdkVersion="18"
    android:targetSdkVersion="21" />

这是我的网络视图设置:

 private void setMyWebviewSettings(WebSettings MyWebviewSettings) {
    MyWebviewSettings.setAllowFileAccessFromFileURLs(true);
    MyWebviewSettings.setAllowUniversalAccessFromFileURLs(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setJavaScriptEnabled(true);
    MyWebviewSettings.setDomStorageEnabled(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setBuiltInZoomControls(true);
    MyWebviewSettings.setAllowFileAccess(true);
    MyWebviewSettings.setSupportZoom(true);
}

如果我可以直接从我的应用程序访问相机(使用正常活动),为什么我不能从 WebView 中打开它?!

原文由 McLan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
1 个回答

根据 meuser07 的回答,这对我有用。除了 Manifest.xml 中的权限外,您还需要在运行时检查/授予权限。

我希望它有所帮助。

             override fun onPermissionRequest(request: PermissionRequest) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    if (ContextCompat.checkSelfPermission(this@YourActivity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                                                RxPermissions(this@YourActivity).request(Manifest.permission.CAMERA).subscribe({
                            if (it) request.grant(request.resources)
                        }, {
                            Timber.e(it, "Error requesting camera")
                        }).addSubscription()
                    } else {
                        request.grant(request.resources)
                    }
                }
            }

我正在使用 RxPermission 授予权限。此外,您需要添加此配置。

 webView.settings.mediaPlaybackRequiresUserGesture = false

原文由 Frank Teng 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题