Mi cámara Android Uri está devolviendo un valor nulo, pero el arreglo de Samsung está en su lugar, ¿ayuda?

Así que estoy al tanto del problema de la cámara en los dispositivos Samsung. Necesitas crear un Uri antes de llamar a la cámara como:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, m_username); mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

Este ejemplo crea un Uri para que la cámara almacene los datos. Mi aplicación tiene una función de cámara en dos ubicaciones. Ambos son idénticos (pasta de copia directa), pero en una actividad el objeto mImageUri convierte en nulo durante el proceso de cámara, mientras que en la otra no. Este último funciona bien, pero el primero da un valor nulo que a su vez me impide guardar la imagen, previsualizándola, etc. Proporcionaré el código onResult a continuación:

 case CAMERA_PIC_REQUEST : if(resultCode == RESULT_OK) { if(intent != null) { //For non-Samsung devices Log.e("Intent value:", intent.toString()); mImageUri = intent.getData(); } mAvatar = BitmapStatic.createImage(mImageUri, this); Drawable draw = new BitmapDrawable(getResources(), mAvatar); m_photoButtonE.setImageDrawable(draw); m_imageChanged = true; } break; 

El ejemplo anterior es de la actividad de trabajo. A continuación se muestra la actividad en la que esto no funciona:

 //On pressing the "Take Photo" button: Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, mUsername); mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); if(mImageUri == null) { Log.e("image uri is null", "what?"); } else { Log.e("oh nevermind", "image uri is NOT null"); } cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); //On Result: case CAMERA_PIC_REQUEST : if(resultCode == RESULT_OK) { if(intent != null) { Log.e("Intent value:", intent.toString()); mImageUri = intent.getData(); } else { Log.e("Intent is null", "yep it is."); if(mImageUri == null) { Log.e("nullcheck on memberimageuri", "its null"); } else { Log.e("nullcheckon memberimage", mImageUri.toString()); } } mImage = BitmapStatic.createImage(mImageUri, this); Drawable draw = new BitmapDrawable(getResources(), mImage); mPhotoPreview.setImageDrawable(draw); } break; 

Observe los archivos de registro que he puesto en este segundo ejemplo. Cuando hago clic en el botón "Tomar imagen", la comprobación nula del objeto mImageUri devuelve true. Así que este objeto no es nulo. Pero en algún lugar durante el proceso de toma de imágenes que el valor se convierte en nulo. La segunda comprobación durante onResult () devuelve false. Una vez más, esto es casi idéntico a mi configuración en la otra actividad, donde funciona bien.

¿Alguna idea?

Su actividad se destruye durante la operación de actividad de la cámara y se vuelve a crear después. Debe utilizar el mecanismo onSaveInstanceState / onRestoreInstanceState en su actividad para conservar el URI de la imagen (y cualquier otro dato) al reiniciar la actividad.

Me gusta esto:

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mImageUri != null) { outState.putString("cameraImageUri", mImageUri.toString()); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState.containsKey("cameraImageUri")) { mImageUri = Uri.parse(savedInstanceState.getString("cameraImageUri")); } } 

Puedo sugerir para crear el archivo inicial (temporal) al principio, luego pasar el Uri en el Intent. En la función "onActivityResult ()" tendrá el archivo con la imagen llena.

 File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "folderName"); dir.mkdirs(); if (dir.exists()) { try { imageFile = File.createTempFile("IMG_", ".jpg", dir); } catch (IOException e) { e.printStackTrace(); } } if (imageFile != null) { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile)); activity.startActivityForResult(cameraIntent, REQUEST_CODE); } 
  • Cámara frontal Android
  • Las líneas de color verde aparecen en la vista previa de la cámara
  • Se detiene la demostración de la API de la cámara SDK de Android
  • ¿Por qué la cámara del emulador androide se detiene inesperadamente?
  • Camerainfo.orientation da una respuesta equivocada
  • Forzar la resolución de la cámara en Android
  • Obtener sólo la parte superior de la cámara
  • Android camera2 Error de API en la llamada a createCaptureSession
  • Crear vista de cámara personalizada con Ionic
  • La superficie de la cámara Android se cambió constantemente
  • Compruebe la cámara en Android 1.6 (SDK 4)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.