2010年12月30日星期四

使用意圖"MediaStore.ACTION_IMAGE_CAPTURE"要求其他服務提供程序幫我們拍照

在之前另一篇文章描述了如何"實現Android照相機的拍照功能(Camera.takePicture)", 當然,這是一個很簡單的例子. 其實,有時我們不需要我們自己編寫所有的程序碼; Android提供了一種機制: 意圖(Intent).

通過使用意圖"android.provider.MediaStore.ACTION_IMAGE_CAPTURE", 我們可以要求其他服務提供程序幫助, Android操作系統會自動選擇合適的程序幫我們拍照, 然後再把圖片送回給我們.

MediaStore.ACTION_IMAGE_CAPTURE

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/captureimage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Call for ACTION_IMAGE_CAPTURE"
/>
<ImageView
android:id="@+id/imagecaptured"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>


AndroidImageCapture.java
package com.AndroidImageCapture;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class AndroidImageCapture extends Activity {

ImageView imageiewImageCaptured;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonImageCapture = (Button)findViewById(R.id.captureimage);
imageiewImageCaptured = (ImageView)findViewById(R.id.imagecaptured);

buttonImageCapture.setOnClickListener(buttonImageCaptureOnClickListener);
}

Button.OnClickListener buttonImageCaptureOnClickListener
= new Button.OnClickListener(){

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);

}};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK)
{
Bundle extras = data.getExtras();
Bitmap bmp = (Bitmap) extras.get("data");
imageiewImageCaptured.setImageBitmap(bmp);
}

}
}


相關文章:
- 通過EXTRA_OUTPUT, 指定儲存圖像的路徑



9 則留言:

  1. 您好~
    目前參考您的文章在實做上有些疑問
    想請教一下
    有辦法回傳外部程式拍完照後所儲存的圖片路徑嗎?

    回覆刪除
  2. 但是有的相機呼叫的時候~沒有辦法指定相片儲存路徑(實際測是他還是會存在預設路徑)...因為目前要實做上傳網路的功能,所以想說是否有辦法得到呼叫的相機所預設的儲存路徑

    回覆刪除
  3. 有的相機不能? 這個我也不清楚!

    回覆刪除
  4. 還是謝謝你熱心解答︿︿

    回覆刪除
  5. 請問要如何呼叫其他相機幫忙拍後
    要如何引導回自己所寫的程式頁面去??

    回覆刪除