インテント経由のカメラ連携でハマったこと2(CROP編)

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

前回、カメラ連携でとりあえずコンテントプロバイダーでなく「ファイルパスから生成したUri」を指定」に変更してintentが帰ってきました。

だが次はトリミング(CROP)が上手いくいかない。

要は、CROPで加工される画像URIは
content://xxxxx/
の形式でないとだめとのこと。

それなら実体を取得しようということでContentResolverを使うことにして以下のようにCROPのintentを発行する前に処理を追加

ContentResolver cr = getContentResolver();
//最新日付が先頭にくるようにソートする
Cursor c = MediaStore.Images.Media.query(cr,
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    null,
    null,
    MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");

c.moveToFirst();
String id =c.getString(c.getColumnIndexOrThrow(BaseColumns._ID));
uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  id);

intent = new Intent("com.android.camera.action.CROP");
intent.setData(uri);
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);

撮影して保存した瞬間でしかも他の端末とデータを共有してるわけでもないのでこれでもいいかと。
実際はファイル名検索とかするべきなんでしょうが時間がないのでそれはまた次回happy01