ブログBlog

カメラ機能の呼び出し

投稿日:2014年07月23日

布内です。

Androidでアプリ内でカメラ機能を呼び出しで思わぬ失敗がありました。

まず、カメラの起動ですが、

String fileName = setFileName()+”.jpg”;
Uri ImageUri = getPhotoUri(fileName);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUri);
startActivityForResult(intent,1)

これでカメラを起動させられます。
intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUri);
で指定したUriに撮影した画像データが描き込まれます。
getPhotoUriは下記のように書きました。

private Uri getPhotoUri(String fileName){
ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, fileName);
values.put(Images.Media.MIME_TYPE, “image/jpeg”);
Uri uri = getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values);
return uri;
}

カメラで撮影後にonActivityResultが呼び出されます。

protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode == 1 && resultCode == RESULT_OK){
Bitmap image = null;
InputStream in = null;
try{
in = getContentResolver().openInputStream(ImageUri);
image = BitmapFactory.decodeStream(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

requestCodeはActivityに戻ってきた時に何処から戻ってきたかを確認する物で、カメラ起動時のstartActivityForResult(intent,int requestCode)

になります。上記の場合は1です。

tryの中でUriからBitmapを取り出してimageに入れてます。

これでカメラを起動、撮影が出来たのですが、スマートフォンだとエラーがでました。

Uri uri = getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values)
で、Uriを指定する場所にアクセスできませんとの事。
タブレットだと実行できたので悩みましたが、よく見ると、マニフェストにパーミッションを追加するようにとエラーメッセージが表示されていたので、

android:name = “android.permission.WRITE_EXTERNAL_STORAGE”

とパーミッションを追加してやれば無事に解決しました。

マニフェストに追加した状態

PAGE TOP