2012-05-31 53 views
10

Estoy tratando de desarrollar el uso de la cámara en mi aplicación de Android.La cámara siempre devuelve resultCode como 0

El problema es que la cámara siempre devuelve un código de resultado de 0, independientemente de si presiono hecho o cancela. El fragmento de código que uso es el siguiente:

protected void startCameraActivity() 
{ 

    Log.i("MakeMachine", "startCameraActivity()"); 

    File file = new File(_path); 
    Uri outputFileUri = Uri.fromFile(file); 

    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    startActivityForResult(intent, 0); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

    Log.i("MakeMachine", "resultCode: " + resultCode); 

    switch(resultCode) 
    { 
     case 0: 
      Log.i("MakeMachine", "User cancelled"); 
      break; 

     case -1: 
      Log.i("MakeMachine", "User done"); 
      onPhotoTaken(); 
      break; 
    } 
} 

El Logcat muestra:

05-31 14:58:15.367: E/asset(29114): MAS: getAppPckgAndVerCode package: makemachine.android.examples === version 1 
05-31 14:58:15.398: D/dalvikvm(29114): Trying to load lib lib_glossary.so 0x0 
05-31 14:58:15.414: D/dalvikvm(29114): Added shared lib lib_glossary.so 0x0 
05-31 14:58:26.125: I/MakeMachine(29114): ButtonClickHandler.onClick() 
05-31 14:58:26.125: I/MakeMachine(29114): startCameraActivity() 
05-31 14:58:26.507: W/IInputConnectionWrapper(29114): showStatusIcon on inactive InputConnection 
05-31 14:58:36.375: I/MakeMachine(29114): User cancelled 
05-31 14:58:36.375: I/MakeMachine(29114): resultCode: 0 
05-31 14:58:50.945: I/MakeMachine(29114): ButtonClickHandler.onClick() 
05-31 14:58:50.945: I/MakeMachine(29114): startCameraActivity() 
05-31 14:58:51.429: W/IInputConnectionWrapper(29114): showStatusIcon on inactive InputConnection 
05-31 14:59:01.554: I/MakeMachine(29114): User cancelled 
05-31 14:59:01.554: I/MakeMachine(29114): resultCode: 0 
+0

Puede mostrarnos los registros. Eso ayudaría a resolver el problema. –

+0

He incluido los detalles del logcat ... –

+0

Si está guardando su imagen en una tarjeta sd, ¿ha agregado el permiso de escritura en manifiesto? –

Respuesta

5

De acuerdo con la sección de comentarios, la razón por la que el resultCode regresaba 0 (es decir, el resultado fue cancelado) se porque al tomar una foto para guardarla en la tarjeta SD, debe agregar el permiso WRITE_EXTERNAL_STORAGE a su manifiesto.

0

Además, algunas veces el problema se debe a que no se ha agregado personalmente una subcarpeta requerida. La aplicación bloquea silenciosamente el código de resultado resultante como 0 cada vez.

2

El problema (en Android> = 5.0) podría ser con el modo singleInstance.

si tiene su actividad launchMode establecida en singleInstance, entonces en Android < 5.0 recibirá el resultado cancelado inmediatamente. En Android> = 5.0 tendrá resultCode == Activity.RESULT_CANCELED.

Intente utilizar launchMode = singleTask. Es muy similar a singleInstance, pero permite que se inicien otras actividades en la tarea.

Más información aquí: https://developer.android.com/guide/topics/manifest/activity-element.html#lmode

2

que estaba experimentando el mismo tema. Cámara trabaja en 5.0+ con lauchmode = SingleInstance devolver un "RESULT_OK" correcto, pero en Android 4.0 que estaba volviendo un 0 hasta:

Android 4.0 cambió a "launchMode = singleTask" en el AndroidManifest.xml para el Actividad llamando a la cámara dando como resultado "RESULT_OK" == 1

Esto es útil para aplicaciones con compatibilidad con versiones anteriores.

+0

no funcionó para Android 4.4.2 – Ujjwal

Cuestiones relacionadas