2017-01-30 136 views
0

我试图在表面视图中打开前置摄像头,但我得到的结果无法连接到相机服务的Android无法切换到前置摄像头表面观

试过代码

mCamera= Camera.open(cameraId); 

0 CAMERA_FACING_BACK

1 CAMERA_FACING_FRONT

什么是解决方案..?

+0

特定错误,是什么呢? – josedlujan

+0

java.lang.RuntimeException:无法连接到相机服务 – Sasi

回答

0

你可以附加你的AndroidManifest.xml文件。

也许您忘记了使用相机的增加许可。

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

更多信息,你可以采取camera class

+0

之后,我有相同的错误** java.lang.RuntimeException:无法连接到相机服务** – Sasi

1

是的,我得到的答案

reverseCamera.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      boolean hasFront = hasFrontCamera(); 
      if (hasFront) { 
       reverseCamera.setVisibility(View.VISIBLE); 
       mCamera.stopPreview(); 
       mCamera.release(); 

       if (currentCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) { 
        currentCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT; 
       } else { 
        currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; 
       } 
       mCamera = Camera.open(currentCameraId); 

       setCameraDisplayOrientation(MainActivity.this, currentCameraId, mCamera); 
       try { 

        mCamera.setPreviewDisplay(mHolder); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       mCamera.startPreview(); 
      } else { 
       reverseCamera.setVisibility(View.GONE); 
      } 
     } 

    }); 

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