Android呼叫攝像頭

it_zhang425發表於2016-04-12

第一步必須加入呼叫攝像頭硬體的許可權,拍完照後我們要將圖片儲存在SD卡中,必須加入SD卡讀寫許可權,所以第一步,我們應該在Android清單檔案中加入以下程式碼

<uses-permission android:name="android.permission.CAMERA"/>//攝像頭許可權

SD卡讀寫許可權

<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

第二步,要將攝像頭捕獲的影像實時地顯示在手機上。

我們是用SurfaceView這個檢視元件來實現的,因此在main.xml中加入下列程式碼

<SurfaceView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:id="@+id/surfaceview"

/>

第三步,攝像頭預覽

public class MainActivity extends Activity implements SurfaceHolder.Callback

繼承Activity,實現SurfaceHolder.Callback,MainActivity裡需要我們複寫以下幾個方法:

[java] view plain copy
 print?
  1. @Override  
  2. public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {  
  3.     System.out.println("surfacechanged");  
  4. }  
[java] view plain copy
 print?
  1. @Override  
  2. public void surfaceCreated(SurfaceHolder holder) {  
  3.     System.out.println("surfacecreated");  
  4.     //獲取camera物件  
  5.     camera = Camera.open();  
  6.     try {  
  7.         //設定預覽監聽  
  8.         camera.setPreviewDisplay(holder);  
  9.         Camera.Parameters parameters = camera.getParameters();  
  10.           
  11.         if (this.getResources().getConfiguration().orientation   
  12.                     != Configuration.ORIENTATION_LANDSCAPE) {  
  13.             parameters.set("orientation""portrait");  
  14.             camera.setDisplayOrientation(90);  
  15.             parameters.setRotation(90);  
  16.         } else {  
  17.             parameters.set("orientation""landscape");  
  18.             camera.setDisplayOrientation(0);  
  19.             parameters.setRotation(0);  
  20.         }  
  21.         camera.setParameters(parameters);  
  22.         //啟動攝像頭預覽  
  23.         camera.startPreview();  
  24.         System.out.println("camera.startpreview");  
  25.           
  26.     } catch (IOException e) {  
  27.         e.printStackTrace();  
  28.         camera.release();  
  29.         System.out.println("camera.release");  
  30.     }  
  31. }  

 

[java] view plain copy
 print?
  1. @Override  
  2. public void surfaceDestroyed(SurfaceHolder arg0) {  
  3.     System.out.println("surfaceDestroyed");  
  4.     if (camera != null) {  
  5.         camera.stopPreview();  
  6.         camera.release();             
  7.     }  
  8. }  


當然還有onCreate方法

[java] view plain copy
 print?
  1. @Override  
  2.     protected void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         setContentView(R.layout.activity_main);  
  5.         context = this;  
  6.           
  7.         surfaceview = (SurfaceView)findViewById(R.id.surfaceview);  
  8.         surfaceholder = surfaceview.getHolder();  
  9.         surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  10.         surfaceholder.addCallback(SafeActivity.this);  
  11.     }  

,

當然有些變數還需要定義,

[java] view plain copy
 print?
  1. private static Context context = null;  
  2. private SurfaceView surfaceview;  
  3. private SurfaceHolder surfaceholder;  
  4. private Camera camera = null;  

相關文章