为什么应用没有看到Camera2API的权限?

时间:2016-06-26 14:13:05

标签: java android camera android-camera android-camera-intent

我有一个非常大的问题(

我正在使用Camera2API并且我使用标准的Google示例。

Mystic是我使用这种方法的时候

private void openCamera(int width, int height) {
    setUpCameraOutputs(width, height);

    configureTransform(width, height);
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
        if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
            throw new RuntimeException("Time out waiting to lock camera opening.");

        }

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
                PackageManager.PERMISSION_GRANTED) {
            return;
        }

        manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);


    } catch (CameraAccessException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted while trying to lock camera opening.", e);
    }
}

我使用Samsung S6 android 6.0

我希望方法manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); - 会打开相机,但不是这样,代码正在停止

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
                PackageManager.PERMISSION_GRANTED) {
            return;
        }

据我了解,这意味着我的清单不包含权限,但我检查了并且有适当的权限

<uses-permission android:name="android.permission.CAMERA" />

这是什么意思?

我有这个许可,为什么它没有通过检查?

我尝试在Meizu MX5 android 5.1启动此应用,然后打开相机,一切正常......

也许问题出现在androind版本中?

我做错了什么?我怎么检查呢?

2 个答案:

答案 0 :(得分:1)

你说你正在使用Android 6.0吗? 根据{{​​3}},即使您在清单中声明权限,您也必须单独检查每个权限,如果尚未授予权限,则请求每个权限。
为此,请执行以下操作:

if (ActivityCompat.checkSelfPermission(this,Manifest.permission.CAMERA) !=
        PackageManager.PERMISSION_GRANTED) {
        return;
}

而不是return,请执行此操作,

ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA},YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK);

并实现回调函数,如链接页面中所述

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d(TAG,"Granted");
                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {
                Log.d(TAG,"Denied");
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

希望有所帮助。

答案 1 :(得分:0)

在您的三星中转到:设置 - &gt;应用 - &gt; “你的应用” - &gt;权限;并手动设置权限。当您的目标API为23及更高版本时会发生这种情况。它将在较低版本上运行正常。如果您想在Android 6.0及更高版本上自动授予您的应用权限,请在gradle中将目标API更改为22.此外,最好在您的应用中实现请求权限。