カメラの画像プレビューからのIntentから画像を取得する
|今回はカメラのプレビュー画面の共有ボタンから発行されるIntentから、画像を取得する方法を紹介します。
詳細は以下から。
AndroidManifestの編集
まずは、カメラのプレビュー画面の共有ボタンから発行されるIntentを受け取る為にAndroidManifestを編集します。
カメラのプレビュー画面の共有ボタンから発行されるIntentのアクションがandroid.intent.action.SENDで、カテゴリーはandroid.intent.category.DEFAULT、データのタイプはimage/jpegですので、AndroidManifestのactivityタグ内に以下のようにintent-filterを追記します。
1 2 3 4 5 | <intent-filter> <action android:name= "android.intent.action.SEND" /> <category android:name= "android.intent.category.DEFAULT" /> <data android:mimeType= "image/jpeg" /> </intent-filter> |
Intent.EXTRA_STREAMからUriを取得する
ファイルなどのUriをIntentで受け渡す場合は通常、Intent.EXTRA_STREAMを使用します。カメラのプレビュー画面から送られてくる画像のUriもIntent.EXTRA_STREAMを使用して送信されてきます。
Intent.EXTRA_STREAMからUriを取得するためにはgetParcelableExtraメソッドを使用します。
1 2 3 4 5 6 7 8 | //Intentの取得 Intent cameraIntent = getIntent(); //画像のUri取得 Uri uri; if (Intent.ACTION_SEND.equals(cameraIntent.getAction())) { uri = cameraIntent.getParcelableExtra(Intent.EXTRA_STREAM); } |
取得したUriからMediaStoreを使用して画像を取得する
getParcelableExtraメソッドで取得したUriから画像を取得するにはMediaStoreを使用して以下のように記述します。
1 2 3 4 5 6 7 8 9 | Bitmap cameraImage = null ; try { cameraImage = MediaStore.Images.Media.getBitmap(getContentResolver() , uri); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } |