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.
- Intentos en Kotlin
- ActivityNotFoundException intentando cargar los contactos de ContentProvider?
- Android - Cómo interceptar la intención de 'Instalar aplicación'
- ¿Cómo puedo saber si existen extras de Intent en Android?
- Referencia de intenciones de Google Play para Google
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
- Android: Null Pointer Excepción al llamar a una nueva intención
- Visualización del menú principal de la aplicación / pantalla de inicio al volver a la aplicación después de haber iniciado una Actividad / Intención externa
- ¿Cómo reducir el tamaño de la imagen de la cámara mientras se guarda, utilizando la acción de la cámara?
- Abre la actividad de correo electrónico y obtén resultados?
- Android: Evento ACTION_POWER_CONNECTED no se envía a mi BroadcastReceiver
- Cómo eliminar la tarea de inicio automático en Android
- Android: Radio de red desactivada antes del evento ACTION_SHUTDOWN. Orden de cambios modificada en ICS
- Pasar múltiples banderas a una intención en android
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"
- Robolectric falla al inflar el archivo de diseño si hay una vista personalizada
- Android tamaño de la barra de clasificación (no puede utilizar Widget.RatingBar.Small)