Nexus 5x逆向风景传感器修复了一个安卓相机预览应用程序

我是Android开发的新手,所以如果我的问题是微不足道的,我很抱歉。 在我的应用程序的一部分,我需要我的后置摄像头的实时预览,所以我创build了一个自定义的类扩展SurfaceView和实现SurfaceHolder.Callback(我基本上遵循Android文档中的说明)。

不幸的是,我正在用Nexus 5xtesting我的应用程序,我刚刚意识到它已经以相反的方式安装了相机传感器。 出于这个原因,当我的Nexus 5x上运行时,我的应用程序的相机预览看起来颠倒,这是我不想要的东西。

看来,新的android.hardware.camera2 API是能够自动处理这个问题。 最终,我需要使用这个新的API来更新我所有的代码,但现在我需要的是使用旧相机API的快速修复。

所以我在那里读了一些代码,我需要在SurfaceChanged方法中引入一些代码来解决这个问题。 这里是:

Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); if(display.getRotation() == Surface.ROTATION_0) { parameters.setPreviewSize(capHeight, capWidth); camera.setDisplayOrientation(90); } if(display.getRotation() == Surface.ROTATION_90) { parameters.setPreviewSize(capWidth, capHeight); } if(display.getRotation() == Surface.ROTATION_180) { parameters.setPreviewSize(capHeight, capWidth); } if(display.getRotation() == Surface.ROTATION_270) { parameters.setPreviewSize(capWidth, capHeight); camera.setDisplayOrientation(180); } camera.setParameters(parameters);*/ camera.startPreview(); 

问题是我没有看到有什么改变。

有什么想法吗?

Solutions Collecting From Web of "Nexus 5x逆向风景传感器修复了一个安卓相机预览应用程序"

5X相机不是“反向”的。 它会在其参数中报告正确的相机方向,因此不需要特殊的解决方法,只需确保正确设置显示方向:

  public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) { android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(cameraId, info); int rotation = activity.getWindowManager().getDefaultDisplay() .getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } camera.setDisplayOrientation(result); } 

http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29

 if (Build.MODEL.equals("Nexus 5X")){ // rotate camera 180° mCamera.setDisplayOrientation(180); } 

将5x更改为5X就可以了。

同样在这里。 由于camera2不支持<API 21的设备,也不想实现这两个API,所以很快就能搞定。

我正在尝试类似于:

 if (Build.MODEL.equals("Nexus 5x")){ // rotate camera 180° mCamera.setDisplayOrientation(180); } 

但不能旋转相机的显示。 要检查是否有什么与PreviewCallback

使用2 apis是不是一件坏事? 正如在这个主题中,不推荐: 如何使用Android的相机或camera2 API来支持旧的和新的API版本没有弃用笔记?