例えば、ギャラリーから画像を選択するときは Intent.ACTION_GET_CONTENT を使いますが、 カメラを起動して撮影した画像を取得するときは MediaStore.ACTION_IMAGE_CAPTURE を使います。
そのため、まず「ギャラリーから選択」と「カメラで撮影」のどちらかを選ぶためのダイアログを用意する例をよく見ます。
*ドキュメントプロバイダーが追加されたからか、ACTION_GET_CONTENT でギャラリーが出てこなくなり、代わりにドキュメントがでてきます。ここではギャラリーの方がわかりやすいので、ギャラリーとします。
Intent.EXTRA_INITIAL_INTENTSを使えば、1つのchooserダイアログに両方入れることができます。

- private Uri mPictureUri;
- private void launchChooser() {
- // ギャラリーから選択
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
- i.setType("image/*");
- i.addCategory(Intent.CATEGORY_OPENABLE);
- // カメラで撮影
- String filename = System.currentTimeMillis() + ".jpg";
- ContentValues values = new ContentValues();
- values.put(MediaStore.Images.Media.TITLE, filename);
- values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
- mPictureUri = getContentResolver()
- .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
- Intent i2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- i2.putExtra(MediaStore.EXTRA_OUTPUT, mPictureUri);
- // ギャラリー選択のIntentでcreateChooser()
- Intent chooserIntent = Intent.createChooser(i, "Pick Image");
- // EXTRA_INITIAL_INTENTS にカメラ撮影のIntentを追加
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { i2 });
- startActivityForResult(chooserIntent, IMAGE_CHOOSER_RESULTCODE);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == IMAGE_CHOOSER_RESULTCODE) {
- if (resultCode != RESULT_OK) {
- if (mPictureUri != null) {
- getContentResolver().delete(mPictureUri, null, null);
- mPictureUri = null;
- }
- return;
- }
- // 画像を取得
- Uri result = (data == null) ? mPictureUri : data.getData();
- ImageView iv = (ImageView) findViewById(R.id.imageView1);
- iv.setImageURI(result);
- mPictureUri = null;
- }
- }
0 件のコメント:
コメントを投稿