Camera.open()获取“ <package>的访问受到限制”

时间:2018-12-04 11:26:58

标签: android android-camera android-7.1-nougat

  • 在装有Android 7.1.1的诺基亚6上发生的问题
  • 已授予权限
  • AppOpsManager#checkOp(AppOpsManager.OPSTR_CAMERA, Process.myUid(), getPackageName())返回AppOpsManager#MODE_ALLOWED

当尝试使用Camera.open(i)检查我得到的相机属性时,

  

I / CameraService:摄像机0:“软件包”的访问受到限制

显然,只有在明确限制应用程序的程序包或uId不能启动AppOpsManager#OP_CAMERA的情况下,这种情况才会发生[1]。 但是为什么会这样呢? AppOpsManager#checkOpAppOpsManager#MODE_ALLOWED

之后

示例代码

for (int i = 0; i < numCameras; ++i) {
    List<Size> supportedSizes = null;
    List<int[]> supportedFpsRanges = null;
    Camera camera = null;
    try {
        camera = Camera.open(i);
        Parameters parameters = camera.getParameters();
        supportedSizes = parameters.getSupportedPreviewSizes();
        supportedFpsRanges = getFpsRangesRobust(parameters);
    } catch (Exception e) {
        ...
    } finally {
        if (camera != null) {
            camera.release();
        }
    }

[1] https://github.com/aosp-mirror/platform_frameworks_base/blob/oreo-mr1-release/services/core/java/com/android/server/AppOpsService.java#L2588

1 个答案:

答案 0 :(得分:0)

显然是设备问题。 诺基亚6 / TA-1000,Android 7.1.1

场景

  • 尝试使用相机
  • 应用程序请求许可,请点击“拒绝”
  • 尝试使用相机
  • 应用程序请求许可,请点击“允许”
  • 在logcat中发布错误,摄像头无法工作

可以与任何其他应用程序(包括默认的相机应用程序)重现。