我需要能够检测到设备上的反向横向传感器。
这是我用来检测反向横向的代码,但似乎不适用于Nexus 5X:
public boolean isSensorInReverseLandscape() {
return ((getCameraPosition().equals(Position.FRONT) && mCameraInfo.orientation == 90) ||
(getCameraPosition().equals(Position.BACK) && mCameraInfo.orientation == 270));
}
对于我的Nexus 6P似乎工作正常,它的前置摄像头传感器处于反向风景,因此前后摄像头的方向返回90(当普通前置摄像头返回270时)。然而,Nexus 5X CameraInfo.orientation
似乎返回90,这与您的正常后置摄像头方向相同。
有没有其他可靠的方法来检测相机传感器是否处于反向环境中?不幸的是,我没有可以使用的设备。
编辑:
查看CameraInfo文档:
public int orientation
在API级别9中添加 摄像机图像的方向。该值是摄像机图像需要顺时针旋转的角度,因此它在显示屏上以其自然方向正确显示。它应该是0,90,180或270。
例如,假设设备具有自然高的屏幕。 后置摄像头传感器以横向安装。你在看屏幕。如果相机传感器的顶部与自然方向的屏幕右边缘对齐,则值应为90.如果前置摄像头传感器的顶部与屏幕右侧对齐,则值应为是270。
那么为什么背面朝向相机传感器安装在反向横向还会报告90?那很奇怪..
编辑2:
获取相机信息的代码:
for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
int cameraId = i;
CameraInfo cameraInfo = new CameraInfo();
Camera.getCameraInfo(i, cameraInfo);
CameraLegacy camera = new CameraLegacy(cameraId, cameraInfo, mContext, mMode);
cameras.add(camera);
}
CameraLegacy将信息保存到mCamraInfo。
编辑3:
这是相机构造函数输出方向的方式:
02-19 18:48:01.832: D/CameraController(8093): .findAvailableCameraDevices() - entered
02-19 18:48:01.833: D/CameraController(8093): .findAvailableCameraDevices() - camera id is 0
02-19 18:48:01.833: D/CameraController(8093): .findAvailableCameraDevices() - camera orientation is 90
02-19 18:48:01.994: D/CameraLegacy(8093): CameraLegacy() - camera orientation in constructor is 90
02-19 18:48:01.994: D/CameraController(8093): .findAvailableCameraDevices() - camera id is 1
02-19 18:48:01.995: D/CameraController(8093): .findAvailableCameraDevices() - camera orientation is 270
02-19 18:48:01.995: D/CameraLegacy(8093): CameraLegacy() - camera orientation in constructor is 270