![](/img/trans.png)
[英]Android intent startActivityForResult doesn't return properly
[英]Why doesn't Android crop intent return ActivityResult?
我正在嘗試從媒體庫中裁剪圖像。 我可以訪問圖像,啟動默認裁剪工具甚至保存裁剪的圖像結果。
但是,如果裁剪成功,我正在使用的意圖將不會返回任何結果。
我的主要方法:
// 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”都會抱怨“Binding Transaction失敗”。 我知道這與內存有某種關系,但裁剪文件的大小只有24KB。
找到了這個問題的問題。 不幸的是,這是一個Android限制。
我已將裁剪圖像的輸出設置為400x400。 不幸的是Android的默認裁剪器只能做256x256。 這非常令人沮喪,特別是當沒有關於限制的文檔時。
你在裁剪意圖中調用setResult(int)
( link )嗎?
更新 :\\
發送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,加上您指定的另一個整數)將傳遞回調用Activity(假設使用了startActivityForResult())。 根據您的需要,還有一些覆蓋。 在調用(父)活動中,您必須實現onActivityResultint,int,Intent)
以從退出活動中獲取結果。
在上面提供的鏈接中,有一個標題為“開始活動和獲得結果”的部分,它解釋了從現有活動中獲取信息的多種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.