ブログ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”
とパーミッションを追加してやれば無事に解決しました。
マニフェストに追加した状態