Intención de cultivo de Android no devuelve ActivityResult

Estoy tratando de recortar una imagen de la galería de medios. Puedo acceder a la imagen, iniciar la herramienta de recorte por defecto e incluso guardar el resultado de la imagen recortada. Sin embargo, la intención que estoy usando no devolverá ningún resultado si el cultivo fue exitoso.

– MÉTODO PRINCIPAL –

// 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 () MÉTODO –

 // 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"); } 

Si cancelo la actividad del cultivo, obtendré el mensaje "Recorte de foto cancelado por el usuario" correctamente. Pero si recorté una imagen, la nueva imagen recortada aparecerá en el directorio de destino, pero nunca se llamará a la función OnActivityResult (). ¿¿Lo que da??

ACTUALIZAR

Mirando LogCat, estoy encontrando que cada vez que guardo la imagen recortada, "JavaBinder" se queja de "Failed Binder Transaction". Entiendo que esto es de alguna manera relacionado con la memoria. Pero el archivo recortado tiene sólo 24 KB de tamaño. Hmm.

Encontrado el problema a este problema. Es por desgracia una limitación de Android.

¿Ver Android cultivador no puede ir más allá de 256?

Había fijado la salida de mi imagen cosechada a 400×400. Lamentablemente, el cultivo por defecto de Android sólo puede hacer 256×256. Esto es muy frustrante, especialmente cuando no hay documentación sobre los límites.

¿Está llamando a setResult(int) ( link ) en la intención del cultivo?

ACTUALIZACIÓN : \

El envío de RESULT_CANCELLED es el predeterminado. Siempre será enviado de vuelta a menos que implementar algunas cosas.

En la intención de su cultivo, cuando haya terminado la edición (es decir, que el usuario toque el botón hecho, o algo similar), parte de ese proceso llamaría setResult(RESULT_OK) .

ejemplo:

 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(); } 

Ese resultado (RESULT_OK, más otro entero que especifique) se devuelve a la actividad de llamada (asumiendo que se utilizó startActivityForResult ()). También hay algunas anulaciones, dependiendo de sus necesidades. En la actividad de llamada (padre), tendría que implementar onActivityResultint,int,Intent) para obtener el resultado de la actividad de salida.

En el enlace proporcionado anteriormente, hay una sección titulada "Iniciar actividades y obtener resultados", que explica las múltiples maneras de obtener información de una actividad saliente.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.