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 件のコメント:
コメントを投稿