09 October 2010
android 取得camera的照片

其實想在android裡面實現照相的功能,大致上分成兩種,

第一種是自己去implement一個camera介面出來(不難但複雜,較具有彈性)

第二種是直接利用android內部的預設介面(簡單,就只有單單的拍照功能)


第一種通常會用到的時機,可能是你要作一個類似信義房屋先前作的app,

你可以需要開啟相機,並拿著手機看看周圍,並在你的view上顯示出來這個方向有沒有房子

這種方式要實作,並不困難,只是比較複雜。改天在po code上來教學。

今天是要教學第二種!!

第二種就非常簡單了!

但相對的就沒有什麼彈性,就只有單單的開起android的照相界面,

然後取得照片罷了!

步驟

1.先利用intent去開啟照相的介面

2.在本身的activity去等待回傳的 result




Intent intent =  new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);//利用intent去開啟android本身的照相介面


//設定圖片的儲存位置,以及檔名
File tmpFile = new File(
Environment.getExternalStorageDirectory(),
"image.jpg");
Uri outputFileUri = Uri.fromFile(tmpFile);

/*
* 把上述的設定put進去!然後startActivityForResult,
* 記住,因為是有ForResult,所以在本身自己的acitivy裡面等等要複寫onActivityResult
* 稍後再說明onActivityResult
*/
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 0);




接著就來說明onActivityResult


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {
Bitmap bmp = BitmapFactory.decodeFile(outputFileUri.getPath()); //利用BitmapFactory去取得剛剛拍照的圖像
ImageView ivTest = (ImageView)findViewById(R.id.ivTest);
ivTest.setImageBitmap(bmp);
}
}



最後還得在AndroidManifest.xml上加上下面幾個permission,
  <!-- CAMERA -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />



這樣就完成一個簡單的照相功能!!






blog comments powered by Disqus