このエントリーをはてなブックマークに追加

2010年4月25日日曜日

Android Intent to Take a Picture

[In English]
When we develop an application, sometimes we use camera function for it.
Of course we can implement our own camera function to our application using camera API, but most of Android Phone provide Camera application.
so today I'll show how to start up camera application and retrieve picture data from it using Intent.


final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CAMERA);


We need to call Activity using startActivityForResult (not startActivity) to retrieve picture data.


protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
// get the picture
final Bitmap bitmap = (Bitmap) data.getExtras().get("data");
// do something for bitmap data
final String sUri = MediaStore.Images.Media.insertImage(
getContentResolver(), bitmap, timestamp, timestamp);



}
}


After taking a picture using Camera application, onActivityResult will be called. And then we can get picture data as Bitmap from extras.
But I feel the quality of bitmap data is not good in this case, because data size in intent extras is limited.



[In Japanese]
アプリケーションを作るときに、場合によってはカメラ機能を使うときもあると思います。
その際に、もちろんカメラAPIを使って独自にカメラ機能を実装することもできますが、ほとんどのAndroid携帯はカメラアプリを提供しています。
そこで、今日はIntentを使ってカメラアプリを起動させ、撮影した写真データを取得する方法を紹介します。


final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CAMERA);


この場合、写真データを取得するために、startActivityではなく、startActivityForResultを使う必要があります。


protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
// get the picture
final Bitmap bitmap = (Bitmap) data.getExtras().get("data");
// do something for bitmap data
final String sUri = MediaStore.Images.Media.insertImage(
getContentResolver(), bitmap, timestamp, timestamp);



}
}


カメラアプリで写真を撮った後、onActivityResultが呼び出されます。そこで、写真データをBitmapとしてextrasから取得できます。
ただ、このBitmapのクオリティはあまりよくないように感じました、おそらくはIntentで渡せるデータサイズに制限があるためだと思います。

0 件のコメント:

コメントを投稿