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