Camera.open() 得到 "Access for <package> has been restricted"
Camera.open() gets "Access for <package> has been restricted"
- 使用 Android 7.1.1
的诺基亚 6 出现问题
- 已授予权限
AppOpsManager#checkOp(AppOpsManager.OPSTR_CAMERA, Process.myUid(), getPackageName())
returns AppOpsManager#MODE_ALLOWED
然而,当尝试 Camera.open(i) 检查相机属性时,我得到
I/CameraService: Camera 0: Access for "package" has been restricted
显然这只会发生 [1] 如果应用程序的包或 uId 已明确限制启动 AppOpsManager#OP_CAMERA。
但是为什么会这样呢?在 AppOpsManager#checkOp
之后说 AppOpsManager#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();
}
}
显然是设备问题。
诺基亚 6 / TA-1000,Android 7.1.1
场景
- 尝试使用相机
- 应用请求权限,点击拒绝
- 尝试使用相机
- 应用请求权限,点按允许
- logcat 中出现错误,相机无法正常工作
可与任何其他应用程序重现,包括默认相机应用程序。
- 使用 Android 7.1.1 的诺基亚 6 出现问题
- 已授予权限
AppOpsManager#checkOp(AppOpsManager.OPSTR_CAMERA, Process.myUid(), getPackageName())
returnsAppOpsManager#MODE_ALLOWED
然而,当尝试 Camera.open(i) 检查相机属性时,我得到
I/CameraService: Camera 0: Access for "package" has been restricted
显然这只会发生 [1] 如果应用程序的包或 uId 已明确限制启动 AppOpsManager#OP_CAMERA。
但是为什么会这样呢?在 AppOpsManager#checkOp
之后说 AppOpsManager#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();
}
}
显然是设备问题。 诺基亚 6 / TA-1000,Android 7.1.1
场景
- 尝试使用相机
- 应用请求权限,点击拒绝
- 尝试使用相机
- 应用请求权限,点按允许
- logcat 中出现错误,相机无法正常工作
可与任何其他应用程序重现,包括默认相机应用程序。