Android作物の意図が活動を返さないのはなぜですか?
-
27-10-2019 - |
質問
メディアギャラリーから画像を作成しようとしています。画像にアクセスし、デフォルトのトリミングツールを起動し、トリミングされた画像結果を保存することもできます。
ただし、私が使用している意図は、トリミングが成功した場合、結果を返しません。
私の主な方法:
// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);
intent.setData(uri);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);
- onactivityResult()メソッド -
// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "user cropped a photo");
signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
} else
Log.d(TAG, "user cancelled photo crop");
}
作物の活動からキャンセルすると、「ユーザーのキャンセルされた写真の収穫」メッセージが正常に行われます。しかし、画像をトリミングすると、新しいトリミングされた画像がターゲットディレクトリに表示されますが、onactivityResult()関数は呼び出されません。何が与えるのですか?
LogCatを見ると、トリミングされた画像を保存するたびに「Javabinder」が「バインダートランザクションに失敗した」不満を言うことがわかりました。これは何らかの形でメモリに関連していることを理解していますが、トリミングされたファイルのサイズはわずか24kbです。
解決
この問題の問題を発見しました。残念ながら、Androidの制限です。
見る Androidクロッパーは256を超えることはできませんか?
トリミングされた画像の出力を400x400に設定しました。残念ながら、Androidのデフォルトのクロッパーは256x256のみを実行できます。特に制限に関するドキュメントがない場合、これは非常にイライラします。
他のヒント
あなたは電話していますか setResult(int)
(リンク)作物の意図で?
アップデート:\
Result_Cancelledの送信はデフォルトです。いくつかのことを実装しない限り、常に送信されます。
作物の意図では、編集が完了したら(つまり、ユーザーが完成ボタンをタップするか、似たようなもの)、そのプロセスの一部が呼び出すでしょう setResult(RESULT_OK)
.
例:
public void doneBTNPressed( View view ) {
if ( view.getId() == R.id.doneBTN ) {
this.isCropped = true;
}
}
@Override
protected void onPause() {
if ( this.isCropped ) {
setResult(RESUL_OK);
}
super.onPause();
}
その結果(Result_ok、および指定した別の整数)が呼び出しアクティビティに渡されます(StartactivityForresult()が使用されたと仮定します)。あなたのニーズに応じて、いくつかのオーバーライドもあります。呼び出し(親)のアクティビティでは、あなたは譲らなければなりません onActivityResultint,int,Intent)
既存のアクティビティから結果を取得します。
上記のリンクには、「アクティビティを開始して結果を得る」というタイトルのセクションがあり、これは、出口の行為から情報を取得する複数の方法を説明しています。