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:
- Cómo encender la linterna y la cámara frontal al mismo tiempo en android
- Uso de la cámara de teléfonos, después de capturar la actividad de la imagen no volver a la actividad particular
- ¿Cómo usar la cámara de Android o la API de la cámara2 para admitir versiones antiguas y nuevas de la API sin notas de reprobación?
- Obtener el ángulo de visión del dispositivo de la cámara Android
- Cámara - cambios de vista previa después de iniciar la grabación de vídeo
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?
- Obtener flujo de vídeo IP Cam en Android (MJEPG)
- Cómo hacer que el modo de ráfaga esté disponible para la cámara
- ¿Por qué se rota una imagen capturada con la intención de la cámara en algunos dispositivos de Android?
- Problemas con MediaRecorder al iniciar la captura de vídeo en android
- ¿Cuál es este error al girar el LED al modo TORCH?
- Cómo forzar una cámara de Android a mostrar en modo vertical, o para que yo haga la rotación en su lugar
- Cómo poner el marcador estable (círculo sólido en la imagen). ¿Cuál estará en la misma posición en el próximo marco de la cámara?
- Phonegap cámara Android mata cordova
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); }
- Deshabilitar la animación de transición entre actividades
- OverridePendingTransition no funciona cuando se utiliza FLAG_ACTIVITY_REORDER_TO_FRONT