【问题标题】:Need permission to access camera in Android web-view?需要在 Android 网络视图中访问相机的权限?
【发布时间】:2018-01-31 21:22:15
【问题描述】:

我正在 android studio 中借助 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 android-webview


    【解决方案1】:

    如果您的应用面向 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();
            }
        }
    
    }
    

    阅读runtime permission

    【讨论】:

    • 非常感谢@NIlesh Rathod 我将您的代码集成到我的应用程序中获得了许可,但特定功能在 webview 中不起作用,但在移动浏览器 Chrrome 中运行良好
    • 我想要一些特定的东西我的应用程序正在获得许可但是当我试图从我的应用程序中打开相机功能时没有打开但是当我在 Chrrome 中加载 url 它工作正常应该做什么@Nilesh Rathod
    • 从您的应用程序运行时是否遇到任何异常
    • 没有应用程序运行良好,所有其他功能也运行良好,只是打开相机的功能无法运行,此功能在 Chrrome 中运行良好
    • 用问题@PronabRoy添加打开相机的代码
    【解决方案2】:

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

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

    【讨论】:

    • android 4.4.0 KitKat 版本可以吗?
    • @FlamurBeqiraj 我不知道,之前没有测试过
    【解决方案3】:

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

    Javascript interface

    Android webView

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

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

    这里是可以帮助你的代码 sn-ps

    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");
    

    【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多