Android端末 や カメラ から 画像 を 取得 する方法
アプリ を作っていると
Androidの端末内から 画像 を 取得 したり、
カメラ を 起動 して撮影した 画像 を使ったりしたいことがあると思います。
シガーテイスティングシート アプリ も
葉巻の画像を取得できるようにするために
端末のギャラリーアプリや カメラ を 起動 できるようにしてあります。
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端末 や カメラ から 画像 を 取得 する方法 にトラックバックする
Android端末 や カメラ から 画像 を 取得 する方法のトラックバックURL:
http://chu3.xsrv.jp/mt5/mt-tb.cgi/730
今日のキーワード
当サイトのRSS
カテゴリー
スポンサード リンク
新着記事
月別アーカイブ
オススメ書籍
【中級者必携の3冊】
目的から実現方法を探すいわゆる逆引き本。ネットで探してた情報が1冊にまとまっている感じです。
こちらも逆引き本。しかも情報量が多くて分厚い辞書的な1冊。必ず手元に置いておきたい1冊です。
様々なUIテクニックが載っている1冊。レイアウト関係でここまで詳しい本は他にありません。UIに強くなりたいなら必須。
Copyright (C) 2012 All Rights Reserved Android アプリ の 研究所 アンドロイド ナビ