2015-03-23 2 views
0

У меня есть класс под названием CameraHelper, когда я пытаюсь переключить камеру спереди назад, одним нажатием кнопки, одним плавным переходом. Мое приложение зависает, когда я называю этот класс - я знаю, что я не делаю что-то правильно. Может кто-нибудь помочь мне здесь?Переключить сбой камеры Android

Любая помощь очень ценится.

public class CameraHelper { 
    private final CameraHelperImpl mImpl; 

    public CameraHelper(final Context context) { 
     if (SDK_INT >= GINGERBREAD) { 
      mImpl = new CameraHelperGB(); 
     } else { 
      mImpl = new CameraHelperBase(context); 
     } 
    } 

    public interface CameraHelperImpl { 
     int getNumberOfCameras(); 

     Camera openCamera(int id); 

     Camera openDefaultCamera(); 

     Camera openCameraFacing(int facing); 

     boolean hasCamera(int cameraFacingFront); 

     void getCameraInfo(int cameraId, CameraInfo2 cameraInfo); 
    } 

    public int getNumberOfCameras() { 
     return mImpl.getNumberOfCameras(); 
    } 

    public Camera openCamera(final int id) { 
     return mImpl.openCamera(id); 
    } 

    public Camera openDefaultCamera() { 
     return mImpl.openDefaultCamera(); 
    } 

    public Camera openFrontCamera() { 
     return mImpl.openCameraFacing(CameraInfo.CAMERA_FACING_FRONT); 
    } 

    public Camera openBackCamera() { 
     return mImpl.openCameraFacing(CameraInfo.CAMERA_FACING_BACK); 
    } 

    public boolean hasFrontCamera() { 
     return mImpl.hasCamera(CameraInfo.CAMERA_FACING_FRONT); 
    } 

    public boolean hasBackCamera() { 
     return mImpl.hasCamera(CameraInfo.CAMERA_FACING_BACK); 
    } 

    public void getCameraInfo(final int cameraId, final CameraInfo2 cameraInfo) { 
     mImpl.getCameraInfo(cameraId, cameraInfo); 
    } 

    public void setCameraDisplayOrientation(final Activity activity, 
      final int cameraId, final Camera camera) { 
     int result = getCameraDisplayOrientation(activity, cameraId); 
     camera.setDisplayOrientation(result); 
    } 

    public int getCameraDisplayOrientation(final Activity activity, final int cameraId) { 
     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; 
     CameraInfo2 info = new CameraInfo2(); 
     getCameraInfo(cameraId, info); 
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
      result = (info.orientation + degrees) % 360; 
     } else { // back-facing 
      result = (info.orientation - degrees + 360) % 360; 
     } 
     return result; 
    } 

    public static class CameraInfo2 { 
     public int facing; 
     public int orientation; 
    } 
} 
+1

Вы можете оставить LogCat –

+0

он не может работать на виртуальной, потому что я использовал «OpenGL» ES 2.0 не поддерживается на виртуальном – Monier

+0

, когда я нажимаю на переключатель камеры, это перейти в другой класс я поставил он выше и возвращается, если успех, но это крушение! – Monier

ответ

0
private void switchBackToFrontCamera(int frontCamId) { 

    if (camera != null) { 
     camera.stopPreview(); 
     camera.release(); 
     camera= null; 
    } 

    camera= Camera.open(frontCamId); 

    if (camera != null) { 
     try { 
      camera.setPreviewDisplay(mSurfaceView.getHolder()); 
      camera.startPreview(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
Смежные вопросы