2014年8月15日金曜日

Androidで標準ギャラリーを起動して選択した画像を取得するには。

Androidなアプリを開発していて、端末に保存されている画像をどうこうしたいって時に、標準のギャラリーを表示して、選択された画像をもらえたら楽だわ〜ってことで、作り方を書いておきます。

画面遷移

メインとなるアクティビティであるボタンを押すとギャラリーが起動する。ギャラリーで画像を選択すると起動元のアクティビティに戻る、というシンプルなもの。

ギャラリーを起動する。

Activityからギャラリーを起動するには、Intentを使って、startActivityForRequest()で起動する。


/** gallery request. */
private static final int REQUEST_GALLERY = 1;

/**
 * ギャラリー起動ボタンイベントハンドラ。
 * ギャラリーを起動する。
 */
public void onLaunchGallery(View view) {
  Intent intent = new Intent(Intent.ACTION_PICK);
  intent.setType("image/*");
  startActivityForResult(intent, REQUEST_GALLERY);
}

ギャラリーからの戻りを処理する。

startActivityForResult()で起動した別アクティビティの戻りを処理するコードを書かなきゃいけない。 このメソッドは、requestCodeにはstartActivityForResult()に渡したリクエストコードが、resultCodeには処理結果が、dataには引き継ぎ情報が入ってくる。ので、だいたい次のようなコードになる。 実際の画像へのアクセスの詳細は、次回以降に書く。


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  switch (requestCode) {
  case REQUEST_GALLERY:
    if (resultCode != RESULT_OK) {
      Log.e(TAG, "error occured in gallery. code=" + resultCode);
      return;
    }

    // ギャラリーで選択した画像は、dataから取得できる。
    try {
       // このままでは画像のサイズが大きい場合に、OutOfMemory例外が発生するので注意。
       InputStream in = getContentResolver().openInputStream(data.getData());
       Bitmap image = BitmapFactory.decodeStream(in);
       in.close();
    } catch (Exception e) {
      // FIXME
    }
    break;
  default:
    break;
  }
}

0 件のコメント:

コメントを投稿