【问题标题】:How to Access Camera in Android 6.0 Marshmallow?如何在 Android 6.0 Marshmallow 中访问相机?
【发布时间】:2016-07-20 20:02:51
【问题描述】:

我是 Android 6.0 编码新手,请提供以下代码的解决方案:

当我提供像 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 这样的运行时权限时,它会显示像

这样的异常

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.motorola.camera/.Camera clip={text/uri-list U: file:///storage/emulated/0/Pictures/MyAppNew%20File%20Upload/IMG_20160401_110234.jpg}(有附加功能)}来自 ProcessRecord{ed96564 26955:com.social.nocializer/u0a259} (pid=26955, uid=10259 ) 撤销权限 android.permission.CAMERA

MediaStore.ACTION_IMAGE_CAPTUREMediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE 运行时权限都不起作用...

注意:READ_EXTERNAL_STORAGE 在打开画廊时使用

【问题讨论】:

标签: android camera android-6.0-marshmallow


【解决方案1】:

您必须为此管理运行时权限,因为您在 AndroidManifest 中定义的任何权限都不会自动授予。所以像下面的方法你可以检查你的权限是否被批准

if (checkSelfPermission(Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED) {

    requestPermissions(new String[]{Manifest.permission.CAMERA},
            MY_REQUEST_CODE);
}

这里,MY_REQUEST_CODE 是一个您可以定义的静态常量,它将再次用于 requestPermission 对话框回调。现在,您将需要一个对话框结果的回调:

@Override
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_REQUEST__CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Now user should be able to use camera
        }
        else {
            // Your app will not have this permission. Turn off all functions 
            // that require this permission or it will force close like your 
            // original question
        }
    }
}

【讨论】:

  • 谢谢老兄......它的作品完美无误......非常感谢......
  • @Ronak Joshi .. 谢谢。你拯救了我的一天
  • @Ronak Joshi 如何在我的活动中覆盖 onRequestPermissionResult ???
  • 您可以在覆盖其他方法时轻松覆盖。但它只会在 API 级别大于 23(Android 6.0 Marshmallow)时调用。 @KJEjava48
  • @KJEjava48 要在 Android Studio 中覆盖 onRequestPermissionResult(),请按 CTRL+O(或 Alt+Insert -> 覆盖方法... ) 并双击onRequestPermissionResult()
【解决方案2】:

@Ronak 解决方案对我有用,但进行了一些更改,因为我们只需要检查那些高于 Android M 的设备。

 if( ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        requestPermissions(new String[]{android.Manifest.permission.CAMERA},
                                5);
                    }
                }

并用crl+o复制覆盖下面的方法,粘贴可能会报错:D

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 5) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Now user should be able to use camera
            }
            else {
                // Your app will not have this permission. Turn off all functions
                // that require this permission or it will force close like your
                // original question
            }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 2017-03-14
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多