onActivityResult devuelto por una cámara, Intent null
Sigo las instrucciones de Cámara en el sitio de desarrollo de Android
Acabo de iniciar la intención de la cámara, no construir mi propia cámara.
- SetRotation (90) para tomar la imagen en el modo vertical no funciona en los dispositivos samsung
- ¿Puedo obligar a mi aplicación a iniciar la cámara predeterminada en lugar de ofrecer la lista de "Acción completa usando"?
- Uso de la cámara de teléfonos, después de capturar la actividad de la imagen no volver a la actividad particular
- Android: ¿Cómo hacer una vista previa de cámara en forma de círculo?
- Android: reemplaza la vista previa de la cámara con la imagen
El código de ejemplo para manejar el resultado después de tomar una foto es como sigue.
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Image captured and saved to fileUri specified in the Intent Toast.makeText(this, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the image capture } else { // Image capture failed, advise user } } if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { if (resultCode == RESULT_OK) { // Video captured and saved to fileUri specified in the Intent Toast.makeText(this, "Video saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { // User cancelled the video capture } else { // Video capture failed, advise user } } }
resultCode
está bien, pero los data
siempre son NULL, lo que provoca un NPE. Miré en el sdcard, la foto fue realmente guardado allí. ¿Alguna sugerencia? mucho
Actualización: información de logcat según lo solicitado:
01-28 19:39:00.547: ERROR/AndroidRuntime(24315): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to resume activity {com.example.CameraTest/com.example.CameraTest.MyCamera}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.example.CameraTest/com.example.CameraTest.MyCamera}: java.lang.NullPointerException at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2455) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2483) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1997) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3362) at android.app.ActivityThread.access$700(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1162) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4511) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.example.CameraTest/com.example.CameraTest.MyCamera}: java.lang.NullPointerException at android.app.ActivityThread.deliverResults(ActivityThread.java:2991) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2442) ... 13 more Caused by: java.lang.NullPointerException at com.example.CameraTest.MyCamera.onActivityResult(MyCamera.java:71) at android.app.Activity.dispatchActivityResult(Activity.java:4654) at android.app.ActivityThread.deliverResults(ActivityThread.java:2987) ... 14 more
- Captura de imagen sin permiso con Android 6.0
- PhoneGap en Android: el procedimiento de éxito de camera.getPicture no se llama
- Abra la cámara nativa de Android con OpenCV
- ¿Cómo mostrar la vista previa de 2 cámaras una al lado de la otra?
- ¿Hay alguna manera de liberar una cámara de diferentes actividades después de adquirirlo de una actividad diferente.?
- Cámara FLASH_MODE_ON no funciona en Moto X
- Ejemplos de la API de Google Visión: Obtenga el enfoque de CameraSource
- Intención de la cámara con parámetros de resolución en Android
El problema con su código es el siguiente:
data.getData()
Esta llamada no obtiene el extra con la clave "datos" de la Intent
devuelta. Obtiene los data
campo del Intent
devuelto que es probablemente null
.
Necesita obtener el extra de la Intent
devuelta de esta manera:
data.getExtras().get("data");
Algunas de las otras respuestas han indicado esto, incrustado en toneladas de otro código. Eso hace que sea difícil ver realmente cuál es el problema.
Aquí está la respuesta de una pregunta similar . Parece que podría ser un problema con los teléfonos Samsung …
Básicamente, si tiene un código como este que crea el Propósito:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name // start the image capture Intent startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
Entonces, en onActivityResult
, reemplace data.getData()
con fileUri.toString()
y resolverá su problema.
Pruebe debajo del código:
Button m_btnCamera; ImageView m_ivCaptureImage; String m_curentDateandTime; String m_imagePath; Bitmap m_bitmap; //Start camera to caputre image. Intent m_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); m_intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri()); startActivityForResult(m_intent, TAKE_PHOTO_CODE); private Uri getImageUri() throws CustomException { Uri m_imgUri = null; File m_file; try { SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); m_curentDateandTime = m_sdf.format(new Date()); m_imagePath = File.getPath() + File.separator + m_curentDateandTime + ".jpg"; m_file = new File(m_imagePath); m_imgUri = Uri.fromFile(m_file); } catch (Exception p_e) {} return m_imgUri; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { m_bitmap = ImageHelper.scaleImage(m_imagePath, 200, 200); m_bitmap = ImageHelper.rotateImage(m_bitmap, true, m_rotate); m_ivCaptureImage.setImageBitmap(m_bitmap); } } }
Utilice la solución de @KJ50 y use savedInstanceState
para asegurarse de que no obtiene un valor nulo.
/** * Here we store the file url as it will be null after returning from camera * app */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // save file url in bundle as it will be null on screen orientation // changes outState.putParcelable("file_uri", fileUri); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // get the file url fileUri = savedInstanceState.getParcelable("file_uri"); }
Prueba esto
public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PICK_IMAGE_ID: Bitmap bitmap = ImagePicker.getImageFromResult(this.getActivity(), resultCode, data); if(data!=null){ //set image view } break; default: super.onActivityResult(requestCode, resultCode, data); break; } }
Intente este código abajo …..
btn_capture.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { Bitmap photo = (Bitmap) data.getExtras().get("data"); img.setImageBitmap(photo); } } }
Entonces finalmente agregas el código debajo de tu manifiesto
<uses-feature android:name="android.hardware.camera"></uses-feature>
- La actualización de Android Studio 0.2.6 rompió mi proyecto, me pide que configure jdk
- Por qué getSpeed () siempre devuelve 0 en android