這篇資料不錯,
如何獲取Android設備上的詳細的攝像頭信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置攝像頭,獲取Android攝像頭的詳細信息,在Android 2.3 SDK中得到了增強:
在android.hardware.Camera類中,API Level 9的SDK中加入了兩個比較重要的方法,使用getNumberOfCameras這個static類型方法可以獲取當前Android設備上的攝像頭數 量,比如Nexus S有兩個,方法原型如下
- public static int getNumberOfCameras ()
而對於具體的每個攝像頭的信息,可以通過Camera類的getCameraInfo()這個靜態方法獲取,該方法有兩個參數,參數一的ID,我們 通過getNumberOfCameras獲取的值減1即可,類似數組索引從0開始一樣,用循環遍歷每個攝像頭信息,參數二是 android.hardware.Camera.CameraInfo類,有關getCameraInfo方法的原型如下:
- public static void getCameraInfo (int cameraId, Camera.CameraInfo cameraInfo)
對於Camera.CameraInfo類而言,比較簡單,包含兩個字段
public int facing 代表攝像頭的方位,目前有定義值兩個分別爲CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK後置
public int orientation下面是拍照的旋轉方向,一般自然些有0度、90度、180度和270度,這樣可以獲取我們正確的手握設備是橫着還是豎着,有關拍照時的方向設置,可以參考下面的代碼設置
- public static void setCameraDisplayOrientation(Activity activity,<br>
- int cameraId, android.hardware.Camera camera) {<br>
- android.hardware.Camera.CameraInfo info =<br>
- new android.hardware.Camera.CameraInfo();<br>
- android.hardware.Camera.getCameraInfo(cameraId, info);<br>
- int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();<br>
- int degrees = 0;<br>
- switch (rotation) {<br>
- case Surface.ROTATION_0: degrees = 0; break;<br>
- case Surface.ROTATION_90: degrees = 90; break;<br>
- case Surface.ROTATION_180: degrees = 180; break;<br>
- case Surface.ROTATION_270: degrees = 270; break;<br>
- }<br>
- <br>
- int result;<br>
- if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {<br>
- result = (info.orientation + degrees) % 360;<br>
- result = (360 - result) % 360;// compensate the mirror<br>
- } else {// back-facing<br>
- result = (info.orientation - degrees + 360) % 360;<br>
- }<br>
- camera.setDisplayOrientation(result);<br>
- }
轉:http://blog.csdn.net/raindrophust/article/details/6205455