1. 程式人生 > >android 呼叫前攝像頭進行拍照的方法及完整例子

android 呼叫前攝像頭進行拍照的方法及完整例子

android呼叫camera時,可以自己寫一個activity,賦上相關引數,開啟前camera就可以了;

需要申請的permission,在AndroidManifest.xml中新增:

        <uses-permission android:name="android.permission.CAMERA" />
	<uses-feature android:name="android.hardware.camera" android:required="false" />
	<uses-feature android:name="android.hardware.camera.front" android:required="false" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

主要功能,開啟前camera
	private Camera openFrontFacingCameraGingerbread() {
	    int cameraCount = 0;
	    Camera cam = null;
	    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
	    cameraCount = Camera.getNumberOfCameras();
	    
	    for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
	        Camera.getCameraInfo(camIdx, cameraInfo);
	        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
	            try {
	                cam = Camera.open(camIdx);
	                mCurrentCamIndex = camIdx;
	            } catch (RuntimeException e) {
	                Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
	            }
	        }
	    }

	    return cam;
	}

根據開啟時的橫豎屏方向來調整preview角度
	
	//根據橫豎屏自動調節preview方向,Starting from API level 14, this method can be called when preview is active.
	private static void setCameraDisplayOrientation(Activity activity,int cameraId, Camera camera) 
	{    
		   Camera.CameraInfo info = new Camera.CameraInfo(); 
	       Camera.getCameraInfo(cameraId, info);      
	       int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
	       
	       //degrees  the angle that the picture will be rotated clockwise. Valid values are 0, 90, 180, and 270. 
	       //The starting position is 0 (landscape). 
	       int degrees = 0;
	       switch (rotation) 
	       {   
	           case Surface.ROTATION_0: degrees = 0; break;         
	           case Surface.ROTATION_90: degrees = 90; break;    
	           case Surface.ROTATION_180: degrees = 180; break; 
	           case Surface.ROTATION_270: degrees = 270; break;  
	        }      
	       int result;  
	       if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
	       {        
	           result = (info.orientation + degrees) % 360;     
	           result = (360 - result) % 360;  // compensate the mirror   
	       } 
	       else 
	       {  
	       // back-facing       
	          result = (info.orientation - degrees + 360) % 360;   
	       }     
	       camera.setDisplayOrientation(result);  
	}