La intención de la cámara Android devuelve nulo … a veces
Estoy depurando mi aplicación en 2 dispositivos físicos diferentes:
- Motorola Moto G, Android 4.4.2
- LG OPTIMUS L5 II, Android 4.1.2
Estoy llamando a la cámara en un botón:
- MediaStore.EXTRA_OUTPUT hace que los datos sean nulos, otra forma de guardar fotos?
- Uso de la cámara en el paisaje cuando mi aplicación está en el retrato
- ¿Cómo llamar a una cámara con la intención de tener la grabación, así como la captura de imágenes?
- Android: ¿Comprobar si la cámara admite el enfoque automático?
- Foco continuo de la cámara Android
buttonCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } });
Y administro el resultado de la intención como esto:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Uri selectedImage = data.getData(); // <-- Sometimes null }
El problema aquí es que data.getData()
es nulo en el Motorola Moto G pero no en el LG OPTIMUS, ¿por qué es esto? ¿Cómo puedo evitar obtener null en el Motorola Moto G?
- Autofocus de la cámara Android cuando el usuario mantiene la cámara inmóvil
- Muchas imágenes enfocadas con una centrada en android?
- Android se estrella después de la cámara
- Android Camera.autoFocus y FOCUS_MODE_CONTINUOUS_PICTURE
- Android: ¿La Vista de Galería ha quedado obsoleta?
- Compatibilidad con la versión de la API de Android
- Obtenga uri de la intención de la cámara en android
- Android Camera - ¿Cómo puedo tomar un "rectángulo" específico de la matriz de bytes?
Un poco tarde esta respuesta, pero tuve este mismo problema y encontré una solución:
private static final String STATE_FILE_URI = "state_file_uri"; private static final int BROWSE_CAMERA = 111; private String fileUri; @Override protected void onSaveInstanceState(Bundle outState) { outState.putString(STATE_FILE_URI, fileUri); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { fileUri = savedInstanceState.getString(STATE_FILE_URI); super.onRestoreInstanceState(savedInstanceState); } private void takePictureIntent(){ Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = "your_uri"; takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(fileUri))); startActivityForResult(takePictureIntent, BROWSE_CAMERA); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == BROWSE_CAMERA) { if (data == null) { onDeliveryPicture(Uri.parse("file://" + fileUri)); } else { onDeliveryPicture(data.getData()); } } } } private void onDeliveryPicture(Uri uri) { ... }
¡Espero eso ayude!
- Gradle Android: Construcción de proyectos múltiples, nivel superior build.gradle
- El selector de intenciones permanece abierto cuando usa un subproceso para obtener un recurso de imagen