インテント経由のカメラ連携でハマったこと1

インテントでカメラを起動し撮影した画像をトリミング(CROP)しようとして、Galaxy Tabでは上手くいくのにINFORBAR(A01)ではNG。かなりハマる。

最初、あれこれ調べて単純に
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_CAMERA);

だと画質が悪いとのことで撮影した画像を一旦外部ストレージに保存し後程保存先Uriから画像を読み込むようにするというのが王道パターンのようなので以下で処理する。

//保存先Path
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy_MM_dd_HHmmssSSS");       
imageName = df.format(date).toString() + "_pinregist.jpg";
String photoPath = Environment.getExternalStorageDirectory()+ imageName;

ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE,photoPath);
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
//画像Uri(クラス変数で格納しておく)
ImgUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);

intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,ImgUri);                   
startActivityForResult(intent, REQUEST_CODE_CAMERA);  

■戻ってきたら以下で処理(onActivityResult内の処理)
intent = new Intent("com.android.camera.action.CROP");
intent.setData(ImgUri);
intent.putExtra("outputX", トリミング幅);     //トリミング後の画像の幅(px)
intent.putExtra("outputY", トリミング高さ);    //トリミング後の画像の高さ(px)
intent.putExtra("aspectX", 1);                  //トリミング後の画像のアスペクト比(X)
intent.putExtra("aspectY", 1);                  //トリミング後の画像のアスペクト比(Y)
intent.putExtra("scale", true);                  //トリミング中の枠を拡大縮小できるかどうか
intent.putExtra("return-data", true);         // トリミングしたデータを返却するかどうか
startActivityForResult(intent, REQUEST_CROP_PICK);

上記処理でGalaxy TabはOKでINFORBARはNG。
調べた挙句Sharpのサイトより以下を発見

S03を2.2へアップデートするとSHカメラとの連携が上手くいかなくなる
「コンテンツプロバイダに登録時の戻りUri」に対応しない仕様」
となっているとのこと。これが原因。対応策として
「ファイルパスから生成したUri」を指定」
とのこと。

なので
ImgUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);

ImgUri =Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera", photoPath));

と修正。これでINFORBARでもカメラで撮影⇒保存のあとintentが戻ってくるようになりました。
ただこれで終わるほど簡単ではありませんでした。
後篇に続く