Android端末 や カメラ から 画像 を 取得 する方法

Android端末 や カメラ から 画像 を 取得 する方法 アプリ を作って...

Android端末 や カメラ から 画像 を 取得 する方法

mixiチェック

Android端末 や カメラ から 画像 を 取得 する方法

アプリ を作っていると
Androidの端末内から 画像 を 取得 したり、
カメラ を 起動 して撮影した 画像 を使ったりしたいことがあると思います。

シガーテイスティングシート アプリ も
葉巻の画像を取得できるようにするために
端末のギャラリーアプリや カメラ を 起動 できるようにしてあります。

cigar03.png
 

Android端末のギャラリーや
カメラ から 画像 を 取得 するのはこうやります。

    //写真の選択
    private void setPhoto() {
    	String[] str_items = {getString(R.string.pick_message02), getString(R.string.pick_message03)};
		new AlertDialog.Builder(this)
		.setIcon(android.R.drawable.ic_menu_more)
		.setTitle(getString(R.string.pick_message01))
		.setItems(str_items, new DialogInterface.OnClickListener(){
			public void onClick(DialogInterface dialog, int which) {
				if (which==0) {
					//ギャラリーの起動
					Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		            intent.setType("image/*");
					startActivityForResult(Intent.createChooser(intent, "Select picture"), 999);			
				} else {
					//カメラの起動
					Intent intent = new Intent();
					intent.setAction("android.media.action.IMAGE_CAPTURE");
					startActivityForResult(intent, 999);
				}
			}
		})
		.show();
    }

ダイアログタイトルや選択肢の言葉は適宜変えてくださいね。


ポイントは「startActivityForResult()」を使用していること。

通常のActivity起動の「startActivity()」では返り値を受取れないので
「startActivityForResult()」で返り値(画像データ)を受け取れるようにします。

返り値の受取りはこんな感じ。

    //写真選択インテント呼び出しからの戻り
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 999) {
            if (resultCode == RESULT_OK) {
            	//画像のセット
            	ivPhoto.setImageURI(data.getData());
            }
        }
    }

startActivityForResult() の第2引数で設定した数値が
requestCode に入っているので、
これでどのAcitivityからの戻りかがわかります。

上記例だと、ギャラリーも カメラ も同じ999に設定してしまってますが
本当は分けて処理したほうがいいのかもしれません。

画像データのURIは
data.getData() で 取得 できるので
それを使ってImageViewなどにセットするといいでしょう。
(のちにこの方法での致命的な問題が発覚・・・)


しかし、この方法だと小さい 画像 しか 取得 できないみたいです。

最近のスマフォは解像度が高いので
大きな 画像 を使いたいときもあると思います。

そんなときはこうします。

    //写真の選択
    private void setPhoto() {
    	String[] str_items = {getString(R.string.pick_message02), getString(R.string.pick_message03)};
		new AlertDialog.Builder(this)
		.setIcon(android.R.drawable.ic_menu_more)
		.setTitle(getString(R.string.pick_message01))
		.setItems(str_items, new DialogInterface.OnClickListener(){
			public void onClick(DialogInterface dialog, int which) {
				if (which==0) {
					//ギャラリーの起動
					Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		            intent.setType("image/*");
					startActivityForResult(Intent.createChooser(intent, "Select picture"), 999);			
				} else {
					//カメラの起動
					//大きい画像の取得用
					String filename = "CIGAR"+System.currentTimeMillis()+".jpg";
					
					ContentValues values = new ContentValues();
				    values.put(MediaStore.Images.Media.TITLE, filename);
				    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
				    currentData.photo = getContentResolver().insert(
				            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
				    
				    Intent intent = new Intent();
				    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
				    intent.putExtra(MediaStore.EXTRA_OUTPUT, currentData.photo);
				    startActivityForResult(intent, 999);
				}
			}
		})
		.show();
    }


先にファイルに書き込んで、
戻ってきたときにそのファイルを読み込むイメージです。

詳細はこの本の220ページから載ってます。
(スイマセン、丸投げな感じで・・・)

著者さんのページも参考にしてみてください。
http://d.hatena.ne.jp/gabuchan/20101125/1290681748


ちなみにこの本、カメラから画像を取得する以外にも
たくさんの技術的なトピックが載っていて
非常に役に立ちます。

1冊手元に置いておくことをオススメします。
 
 

▽Android端末 や カメラ から 画像 を 取得 する方法 のキーワード

▽次の記事、前の記事

バックキー ( 戻るボタン )の 検出 方法と処理 | カメラ から 画像 を 取得 する方法( Xperia とそれ以外)

Android アプリ の 研究所 アンドロイド ナビ:新着記事

incorrect AVA format エラー(署名作成時) : 2012年2月25日
署名作成時に Keytool-error: java.io.IOExceptio...
アイデアがどんどん湧く! 9マスメモアプリ : 2011年11月13日
先日、2011年11月11日の11時11分。 この100年に一度の1ならび、 し...
Androidで電子書籍 : 2011年11月 5日
Androidアプリの開発者として また純粋にAndroidのファンとして 日夜...
Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE : 2011年11月 5日
Eclipse から実機にアプリをインストールするときに 下記のエラーが出ました...
iPhone4S へ iPhone3GS のデータが移行されない時の対処方法 : 2011年10月23日
iPhone4Sをやっと手に入れることができました。 購入したのは、64GB の...
たーかーのーつーめー : 2011年10月22日
「たーかーのーつーめー」 でおなじみの『鷹の爪団』。 その中で活躍する『吉田くん...
iPhone4S の新音声機能である Siri がすごいらしい : 2011年10月13日
iPhone4S のみで使える新機能である Siri がすごいと話題です。 ちな...
iPhone4S を買うなら SoftBank ? au ? : 2011年10月10日
ついに iPhone4S の予約が SoftBank と au から10/7(金...
画面サイズとVGAとかの対応表 : 2011年10月 7日
Andoridの端末には様々な画面サイズがあります。 それぞれの画面サイズに最適...
iPhone のように指にくっついてスライドするUI : 2011年10月 7日
iPhone では、画面に表示されている写真などを入れ替えるとき、指で左右にフリ...

▽Android端末 や カメラ から 画像 を 取得 する方法 にトラックバックする

Android端末 や カメラ から 画像 を 取得 する方法のトラックバックURL:
http://chu3.xsrv.jp/mt5/mt-tb.cgi/730

今日のキーワード

当サイトのRSS

カテゴリー

Twitterボタン

アンドロイドナビについて / 記事投稿してみませんか? / イベント情報募集
Copyright (C) 2012 All Rights Reserved Android アプリ の 研究所 アンドロイド ナビ