前回のエントリーでカメラやギャラリーから画像を取得する周りまとめを書きましたが、
カメラからの画像取得に関して、国産端末で上手くいかないことが判明しましたので
こちらのエントリーで訂正させていただきます。


■国産の端末のほとんどでonActivityResultのdataパラメタにuriが入ってきません;;
前回エントリーを書いてからアプリを実際につくり、
国内メーカーの機種で試したところdata.getData()でuriが取得できない事が判明。
そこで保存先を明示することにしました。


まずカメラの呼び出しから
Uri uri; ←Activityクラスにプロパティとして置いてonActivityResultで参照できるように


カメラボタン押下などインテントの呼び出しを行う箇所の記述
------------------------------------------------------
//ContentValues
ContentValues values = new ContentValues();

//ファイル名を決めて
String filename = System.currentTimeMillis() + ".jpg";
//必要な情報を詰める
values.put(MediaStore.Images.Media.TITLE, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
//Uriを取得して覚えておく、Intentにも保存先として渡す
uri= getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

//インテントの設定
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, resourceUri);
startActivityForResult(intent, CAMMERA_IMAGE);
------------------------------------------------------

Manifastへの外部ストレージへの書き出し許可のユーザーパーミッションは忘れないでください。



onActivityResultの修正
------------------------------------------------------
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

     super.onActivityResult(requestCode, resultCode, data);

     if (resultCode != RESULT_OK){
         return;
     }

//uriにnullを詰めるコードを消す

     if (requestCode == GALLERY_IMAGE) {
         resourceUri= data.getData();
     }
     else if(requestCode == CAMMERA_IMAGE){
//カメラからの戻りの場合はuriをdataから取得しない(起動時に指定したUriが入っている)
//         uri =data.getData();
     }
    
     if(uri == null){
         return;
     }

     try {
         InputStream is = getContentResolver().openInputStream(uri);
         Bitmap bitmap = BitmapFactory.decodeStream(is);
        
/*
         //ファイルパスを取得したい場合は下記のようにContentResolverを活用する
         //ContentResolver経由でファイルパスを取得
         ContentResolver cr = getContentResolver();
         String[] columns = {MediaStore.Images.Media.DATA };
         Cursor c = cr.query(uri, columns, null, null, null);
        
         c.moveToFirst();
         File picture = new File(c.getString(0));
*/

     } catch (Exception e){
     // } catch (FileNotFoundException e) {
         // TODO 自動生成された catch ブロック
         e.printStackTrace();
         return;
     }
}
------------------------------------------------------

上記の画像のロードはシンプルな実装ですが、前回も書いた通り下記の関数を噛ませてリサイズしながらロードすることを推奨します。
こちらから飛んでください

これで国産端末でもカメラから画像を取得できると思います。