切换到前置摄像头和后置摄像头的Andr​​oid SurfaceView [英] Switch To Front Camera and Back Camera Android SurfaceView

查看:431
本文介绍了切换到前置摄像头和后置摄像头的Andr​​oid SurfaceView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用的开关摄像头功能。目前,我公司开发的相机对象,做工精细的背摄像头,但不工作的前置摄像头。而我无法找到正面和背面摄像头之间切换的解决方案。这里是我的code ..!

I want to use the switch camera function. Currently I have Developed a Camera Object That working fine for back-camera but not working for front-camera. And I am unable to find a solution for switching between front and back cameras. Here is My Code..!

public class MyCamera extends Activity implements SurfaceHolder.Callback,
Camera.ShutterCallback, Camera.PictureCallback {
Camera mCamera;
SurfaceView mPreview;
String filePath;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera_preview);
    mPreview = (SurfaceView) findViewById(R.id.preview);
    mPreview.getHolder().addCallback(this);
    mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    mCamera = Camera.open();
}

@Override
public void onPause() {
    super.onPause();
    mCamera.stopPreview();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mCamera.release();
    Log.d("CAMERA", "Destroy");
}

public void onCancelClick(View v) {
    finish();
}

public void onSnapClick(View v) {
    mCamera.takePicture(this, null, null, this);
}

@Override
public void onShutter() {
    Toast.makeText(this, "Click!", Toast.LENGTH_SHORT).show();
}

@Override
public void onPictureTaken(byte[] data, Camera camera) {
    FileOutputStream fos = null;
    try {
        filePath = "/sdcard/test.jpg";
        fos = new FileOutputStream(filePath);
        fos.write(data);
        fos.close();
        // Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
    } catch (IOException e) {
        e.printStackTrace();
        Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
    } finally {
        Intent i = getIntent();
        i.putExtra("Path", filePath);
        setResult(RESULT_OK, i);
        finish();
    }
    camera.startPreview();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    Camera.CameraInfo info = new Camera.CameraInfo();
    Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_FRONT, info);
    int rotation = this.getWindowManager().getDefaultDisplay()
            .getRotation();
    int degrees = 0;
    switch (rotation) {
    case Surface.ROTATION_0:
        degrees = 0;
        break; // Natural orientation
    case Surface.ROTATION_90:
        degrees = 90;
        break; // Landscape left
    case Surface.ROTATION_180:
        degrees = 180;
        break;// Upside down
    case Surface.ROTATION_270:
        degrees = 270;
        break;// Landscape right
    }
    int rotate = (info.orientation - degrees + 360) % 360;
    Camera.Parameters params = mCamera.getParameters();
    params.setRotation(rotate);
    mCamera.setParameters(params);
    mCamera.setDisplayOrientation(90);
    mCamera.startPreview();
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mCamera.setPreviewDisplay(mPreview.getHolder());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    Log.i("PREVIEW", "surfaceDestroyed");
}

}

推荐答案

尝试下面code

mCamera= Camera.open(cameraId);

0 CAMERA_FACING_BACK

1 CAMERA_FACING_FRONT

Camera.open(INT)

<一个href=\"http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html#CAMERA_FACING_BACK\"相对=nofollow>相机信息常量

这篇关于切换到前置摄像头和后置摄像头的Andr​​oid SurfaceView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆