从Android 2.3 Gingerbread开始,原生支持前置摄像头。下面我们看看如何在程序里来调用前置的摄像头。
第一种方式是采用MediaStore,调用系统原生的相机。
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- intent.putExtra("camerasensortype", 2); // 调用前置摄像头
- intent.putExtra("autofocus", true); // 自动对焦
- intent.putExtra("fullScreen", false); // 全屏
- intent.putExtra("showActionIcons", false);
- startActivityForResult(intent, PICK_FROM_CAMERA);

- int cameraCount = 0;
- Camera cam = null;
- Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
- cameraCount = Camera.getNumberOfCameras(); // get cameras number
- for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {
- Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo
- if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT ) { // 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置
- try {
- cam = Camera.open( camIdx );
- } catch (RuntimeExceptione) {
- e.printStackTrace();
- }
- }

采用Camera框架的好处在于自身提供了大量的API例如setDisplayOrientation、Camera.Parameters来实现强大的功能,另外结合urfaceHolder.Callback、ShutterCallback和PictureCallback等接口后可以进行界面和功能的自定义,可以自由的实现所需要的界面布局和图像处理效果。例如如下的界面: