1. 程式人生 > >在Android系統中呼叫系統前置攝像頭

在Android系統中呼叫系統前置攝像頭

    從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);
    另外一種方式是採用Camera框架,以前版本的SDK裡只有Camera.open()方法來呼叫後置攝像頭,現在此方法接受一個引數來確定是前置攝像頭還是後置攝像頭。我們還根據新的Camerainfo類和getCameraInfo方法來獲取Android裝置上的詳細的攝像頭資訊,getNumberOfCameras()來獲取攝像頭的數量。典型的呼叫方式如下:
    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等介面後可以進行介面和功能的自定義,可以自由的實現所需要的介面佈局和影象處理效果。例如如下的介面: