Actividad de la cámara que hace que uri pase a null cuando la orientación de la pantalla cambia

Establecer un miembro de datos, imageUri, y pasar que en una intención que lanza la actividad de la cámara. En la actividad de la cámara, tomo una fotografía y giro la pantalla antes de hacer clic en la casilla de verificación para volver a mi actividad. Cuando hago esto, imageUri es null cuando onActivityResult es llamado. Si no girar la pantalla todo funciona bien y imageUri no es nulo.

OnConfigurationChanged no se está llamando en mi actividad para que no sea el problema.

public void takePhoto() { //define the file-name to save photo taken by Camera activity fileName = getFileNameDate(); //create parameters for Intent with filename ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera"); imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); //create new Intent Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, picture_result_code); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i("Camera_onActivityResult", "Got activity result requestCode = " + requestCode + " resultCode: " + resultCode); super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case picture_result_code: if (resultCode == Activity.RESULT_OK) { try { Log.i("Camera", "Preparing to upload image..."); picFile = convertImageUriToFile(imageUri); // Here imageUri is null and causing crash uploadFile(picFile.getPath()); } catch (Exception e) { Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show(); Log.e("Camera", e.toString()); e.printStackTrace(); } } } } 

¿Hay alguna otra manera que debería recuperar la imagen?

Gracias

Creo que imageUri es un campo en su actividad, ¿verdad? Si gira el dispositivo la actividad se destruye y se reinicia, y su campo es nulo. Debe guardar el URI como parte del estado de su actividad. Hay algunos métodos posibles para lograrlo, en es usar onSaveInstanceState (), vea aquí para más detalles: http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os. Bundle% 29

Bloquear la orientación de la pantalla de la invocación La actividad fijó el problema para mí. Si no desea bloquear la suya, puede crear una Actividad con orientación bloqueada sólo para llamar a la cámara y, a continuación, devolver el resultado a su actividad "real".

Para bloquear la orientación de la pantalla, colóquela en la definición de actividad de su manifiesto (ambas líneas):

 android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation|screenSize" 

"Retrato" también puede ser "paisaje"

  • Pausa de envío al marcador
  • Teclado Android aún visible después de lanzar el intento de correo electrónico
  • Apertura del cliente de correo electrónico a través de Intent (pero no para enviar un mensaje)
  • La intención de Android de compartir datos de texto / datos sencillos en Google Drive
  • Impulsión de impresión de Android Call para la causa de la aplicación HP e-print RuntimeException: No se puede iniciar la actividad
  • ¿Está Google Play Music acumulando todas las intenciones de ACTION_MEDIA_BUTTON?
  • Android: android.intent.action.BOOT_COMPLETED en ICS y Gingerbread
  • Página de detalles de las aplicaciones de lanzamiento de Android
  • "Error al entregar el resultado" - onActivityForResult
  • ¿Qué hace Intent.putExtra?
  • El método Onclick no funciona en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.