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