カメラの画像プレビューからのIntentから画像を取得する


今回はカメラのプレビュー画面の共有ボタンから発行されるIntentから、画像を取得する方法を紹介します。

詳細は以下から。

AndroidManifestの編集

まずは、カメラのプレビュー画面の共有ボタンから発行されるIntentを受け取る為にAndroidManifestを編集します。

カメラのプレビュー画面の共有ボタンから発行されるIntentのアクションがandroid.intent.action.SENDで、カテゴリーはandroid.intent.category.DEFAULT、データのタイプはimage/jpegですので、AndroidManifestのactivityタグ内に以下のようにintent-filterを追記します。

<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メソッドを使用します。

//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を使用して以下のように記述します。

Bitmap cameraImage = null;
try {
    cameraImage = MediaStore.Images.Media.getBitmap(getContentResolver()
                                                            , uri);
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}