似たようなものを自力で作ってみたんだけど、もとからあるならそれを使わせてもらいたいもんです。
というわけで、「OS標準のクリッピングを呼び出す方法」を調べてみましたが、中々有益な情報に出会わない。
ちゅーか、画像のセレクタからクリッピングへの流れを組むのは
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.setType("image/*");
- intent.putExtra("crop", "true");
- startActivityForResult(intent, 0);
てなのが出てくるんだけど。
違うんだよ。 今既にこっちでもっているBMPをクリッピングして返して欲しいんだよ!
ってなると、急激に情報がなくなっていきます。 少なくとも日本語圏ではまともなのがない(探し方が悪いだけって話もある)
なので、実際にクリッピング画面をカメラなり壁紙設定から実行して、DDMSのログを見てどのIntentが呼び出されているのかを調べてみました。
すると、
- INFO/ActivityManager(1381): Displayed activity com.android.camera/.CropImage: 863 ms (total 863 ms)
まぁ、863msは置いといて。
com.android.cameraパッケージのCropImageが呼び出されているようです。
ちゅーことは。
- Intent intent = new Intent();
- intent.setClassName("com.android.camera", "com.android.camera.CropImage");
でウッドボール!!
と、思ったら大間違い。 OS2.1以上だと起動しない!!!
なんと、このクリッピングのインテントはOSによって違う模様。 な・なんだってー!
僕はIS01で開発してたので、エミュレータでOS2.1にしてみると
- INFO/ActivityManager(72): Displayed activity com.android.gallery/com.android.camera.CropImage: 1289 ms (total 1472 ms)
うお。 パッケージ名が "com.android.gallery"になってる・・・。
つーか、パッケージが"com.android.gallery"でクラス名が"com.android.camera.CropImage"ってどういことなんだ。
ともかく、
- Intent intent = new Intent();
- intent.setClassName("com.android.gallery", "com.android.camera.CropImage");
にしてあげたら、OS2.1以上では起動しました。
・・・えぇ、1.6で起動しなくなりましたよ。当たり前ですけど。
なーぬーーーー。
ちゅーわけで、もう一手間。
android.os.Build でSDKのVerがわかるようなので、
- final int sdkInt = Integer.parseInt(Build.VERSION.SDK);
で、sdkのVerを取得。 このsdkIntがAPIレベルになるようで。 すると、1.6は4。 2.2なら8です。
それら踏まえて
- Intent intent = new Intent();
- final int sdkInt = Integer.parseInt(Build.VERSION.SDK);
- if(sdkInt <= 4){ //OS1.6
- intent.setClassName("com.android.camera", "com.android.camera.CropImage");
- }else{ //OS2.1
- intent.setClassName("com.android.gallery", "com.android.camera.CropImage");
- }
- intent.setData(Uri.parse("file://" + url));
- intent.putExtra("crop", "true");
- intent.putExtra("outputX", dw);
- intent.putExtra("outputY", dh);
- intent.putExtra("aspectX", dw);
- intent.putExtra("aspectY", dh);
- intent.putExtra("scale", true);
- intent.putExtra("noFaceDetection", true);
- intent.putExtra("return-data", "true");
- intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + url));
- startActivityForResult(intent, INTENT_CALL_CROP);
- intent.putExtra("return-data", "true");
- intent.putExtra("return-data", true);
教えてエライヒト。 それでは、また。ノシシ