La imagen de la cámara es nula si se gira la cámara

Estoy mostrando un selector al usuario para elegir entre Galería o Cámara para seleccionar una foto. Si elijo Cámara, una vez que la cámara se haya cargado, giraré para tomar una foto de Paisaje, tomar la foto y hacer clic en Sí, vuelve a mi aplicación pero la imagen devuelta es nula. Si no hago girar la cámara, la imagen se devuelve bien. ¿Qué me estoy perdiendo? Sé que la rotación hace que la Actividad sea reconstruida, pero ¿por qué el onActivityResult no contendría la información correcta? Aquí está mi objetivo de openImage:

public void openImageIntent() { // Determine Uri of camera image to save. final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyAppImages" + File.separator); root.mkdirs(); SimpleDateFormat sdf = new SimpleDateFormat("ddMMyy-hhmmss"); final String fname = String.format("%s.jpg", sdf.format(new Date())); final File sdImageMainDirectory = new File(root, fname); outputFileUri = Uri.fromFile(sdImageMainDirectory); // Camera. final List<Intent> cameraIntents = new ArrayList<Intent>(); final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); final PackageManager packageManager = getPackageManager(); final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); for (ResolveInfo res : listCam) { final String packageName = res.activityInfo.packageName; final Intent intent = new Intent(captureIntent); intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); intent.setPackage(packageName); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); cameraIntents.add(intent); } // Filesystem. final Intent galleryIntent = new Intent(); galleryIntent.setType("image/*"); galleryIntent.setAction(Intent.ACTION_GET_CONTENT); // Chooser of filesystem options. final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source"); // Add the camera options. chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[] {})); startActivityForResult(chooserIntent, SELECT_PICTURE_REQUEST); } 

Y el método onActivityResult:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTURE_REQUEST) { final boolean isCamera; if (data == null) { isCamera = true; } else { final String action = data.getAction(); if (action == null) { isCamera = false; } else { isCamera = true; } } Uri selectedImageUri; if (isCamera) { selectedImageUri = outputFileUri; } else { selectedImageUri = data == null ? null : data.getData(); } if (imageDelegate != null) { Log.e(TAG, "imageDelegate not null: " + imageDelegate); imageDelegate.gotNewImageUri(selectedImageUri); imageDelegate = null; } else if (getSupportFragmentManager().findFragmentByTag("addofferdialog") != null) { imageDelegate = (AddOfferFragment) getSupportFragmentManager().findFragmentByTag("addofferdialog"); Log.e(TAG, "imageDelegate is null but found fragment: " + imageDelegate); Log.e(TAG, "Activity image: " + selectedImageUri); imageDelegate.gotNewImageUri(selectedImageUri); imageDelegate = null; } else { Log.e(TAG, "cannot find imageDelegate!!!!"); } Log.e(TAG, "selectedImageUri: " + selectedImageUri); } } } 

3 Solutions collect form web for “La imagen de la cámara es nula si se gira la cámara”

Usted tiene que cambiar su archivo de manifiesto

En su manifiesto sólo reemplace debajo del código

 <activity android:name=".CameraTestActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation"> 

Con tu código

 <activity android:name=".CameraTestActivity" android:label="@string/app_name"> 

Simplemente guardar outputFileUri en onSaveInstanceState y restaurarlo en onRestoreInstanceState de otro modo será nulo en cambio de orientación.

Esto funcionó bien para mí

 <activity android:name=".CameraTestActivity" android:configChanges="orientation|screenSize|keyboardHidden"> </activity> 
  • Android: reemplaza la vista previa de la cámara con la imagen
  • Configuración de la orientación EXIF ​​de Android Photo
  • Android - utiliza la cámara sin vista de superficie o textureview
  • ¿Puedes lanzar la aplicación nativa de la cámara desde una aplicación web Html 5?
  • El brillo de la cámara de visión Android (móvil) es muy bajo
  • Las imágenes con la API de Camera2 son realmente oscuras
  • Android Image Redimensionamiento y conservación de datos EXIF ​​(orientación, rotación, etc.)
  • No se puede grabar vídeo y tomar fotogramas de la función de devolución de un elemento de visualización al mismo tiempo
  • Combinación Android de OpenGL de SurfaceTexture (imagen externa) y textura ordinaria
  • Cámara web externa para cámara a android usando usb
  • Subir una imagen de cámara o galería en WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.