resultcode result_ok requestcode implementar example activity android android-camera android-camera-intent

android - result_ok - resultcode ok



onActivityResult regresó de una cámara, Intención nula (7)

El problema con tu código es este:

data.getData()

Esta llamada no obtiene el extra con la clave "datos" del Intent devuelto. Obtiene los data campo del Intent devuelto que probablemente sea null .

Necesitas obtener el extra del Intent devuelto como este:

data.getExtras().get("data");

Algunas de las otras respuestas lo han indicado, incrustadas en toneladas de otro código. Eso dificulta ver realmente cuál es el problema.

Sigo las instrucciones en la cámara en el sitio de desarrollo de Android

Acabo de iniciar la intención de la cámara, no de construir mi propia cámara.

El código de muestra para manejar el retorno de resultados después de tomar una foto es el siguiente.

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 una NPE. Miré en el sdcard, la foto fue guardada realmente allí. ¿Algún consejo? tks mucho

Actualización: información 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


Intente este código a continuación ...

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); } } }

Luego, finalmente, agregue el código de abajo a su manifiesto

<uses-feature android:name="android.hardware.camera"></uses-feature>


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; } }


Pruebe el siguiente 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); } } }


Use la solución de @ KJ50, y savedInstanceState para asegurarse de que no obtenga un 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"); }


Este código te ayudará

El método getData () devuelve datos solo si la versión de Android es más reciente que M, de lo contrario, devolverá un resultado nulo.

if (resultCode == Activity.RESULT_OK) { //Check Android version, as intent.getData() will return data only if v is above or equal to M otherwise the data will be null if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { Uri selectedImageURI = imageReturnedIntent.getData(); Toast.makeText(getActivity(), "URI Path:" + selectedImageURI, Toast.LENGTH_LONG).show(); } else { Bitmap photo = (Bitmap) imageReturnedIntent.getExtras().get("data"); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), photo, "Title", null); Uri selectedImageURI = Uri.parse(path); Toast.makeText(getActivity(), "URI Path:" + selectedImageURI, Toast.LENGTH_LONG).show(); } }


Aquí está la respuesta de una pregunta similar . Parece que podría ser un problema con los teléfonos Samsung ...

Básicamente, si tienes un código como este que crea la intención:

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);

Luego, en onActivityResult , reemplace data.getData() con fileUri.toString() y resolverá su problema.