Force a camera to always open in portrait mode in

2019-01-07 00:58发布

问题:

This question already has an answer here:

  • Android Camera in Portrait on SurfaceView 6 answers

Is it possible to open the Camera Intent in android in only portrait mode, that is even if the user flipped the device, the camera will still be in portrait mode,

I tried the following answer: Force Portrait Mode but didn't work, Thanks

回答1:

Try it -

private 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);
 }

private void initCamera() {
     if(mCamera == null) {
          mCamera = Camera.open();
          setCameraDisplayOrientation(activity, CameraInfo.CAMERA_FACING_BACK, mCamera);
          mCamera.unlock();
      }
}