需要访问安卓网页视图中的摄像头的权限吗?



我正在 android 工作室中Webview的帮助下开发一个 Web 应用程序,但遇到了一些问题,我需要让访问权限打开相机,我该怎么做,我已经在AndroidManifest.xml中授予了以下权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我需要做什么才能打开相机?

如果您的应用面向 Android 6.0 及更高版本,请添加运行时权限

从 Android 6.0(API 级别 23(开始,用户可以在应用运行时(而不是在安装应用时(向应用授予权限

使用以下相机代码添加运行时权限

String permission = Manifest.permission.CAMERA;
int grant = ContextCompat.checkSelfPermission(this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
String[] permission_list = new String[1];
permission_list[0] = permission;
ActivityCompat.requestPermissions(this, permission_list, 1);
}

而不是像这样处理结果

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(AccountClass.this,"permission granted", Toast.LENGTH_SHORT).show();  
// perform your action here
} else {
Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show();
}
}
}

阅读有关运行时权限的信息

我认为这里最好的方法是使用 WebView API 来授予和拒绝权限。

  1. 创建扩展WebChromeClient的类;
  2. 覆盖onPermissionRequest()
  3. 在应用内请求请求权限,或以其他方式处理请求。
  4. 此外,您可能需要覆盖onPermissionRequestCanceled()
  5. 将客户端的实例设置为WebViewwebView.setWebChromeClient(chromeClient);

如果您正在使用webView开发Web应用程序,那么您应该了解Android提供JavascriptInterface。浏览以下链接

Javascript接口

安卓网络视图

您需要做的就是设置 javascript 回调.从您的网页调用该方法,在活动/片段中处理 javascript 回调,然后从那里您可以打开相机。

您还应该检查 @Nilesh Rathod 的答案以获取运行时权限。

以下是对您有所帮助的代码片段

private class WebAppInterface {
public WebAppInterface(Context context) {
}
@JavascriptInterface
public void openCamera(String title) {
//check permissions and open camera intent;
}
}

mWebView.addJavascriptInterface(new WebAppInterface(this), "PLATFORM_ID");

最新更新