2011-06-14 7 views
5

Tengo problemas con una Edición limitada de Galaxy Tab (Google I/O) cuando abro la cámara con un Intento.La captura de imagen de la cámara no puede volver en Galaxy Tab Limited Edition

Este es mi código:

 
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new  
    File(mSavedFilePath))); 
startActivityForResult(imageCaptureIntent, REQUEST_IMAGE_CAPTURE); 

En un Motorola Xoom este código está trabajando muy bien. Pero en Galaxy Tab 10.1, nunca recibo la respuesta de la aplicación de la cámara.

No tengo un seguimiento de pila porque no tengo un error.

¿Alguien tiene alguna idea?

+0

No pudo obtener ninguna información de Logcat? – Macarse

+0

¿Has actualizado tu dispositivo a 3.1 todavía? Gran parte de las aplicaciones internas tenían errores en la versión 3.0 que apareció en ese dispositivo. Puede intentar actualizar manualmente a 3.1 y volver a intentarlo. – Devunwired

Respuesta

0

Suena como un fallo ...

Pero por si acaso, ¿Ha incluido en su AndroidManifest.xml la siguiente ???

<uses-permission android:name="android.permission.CAMERA"></uses-permission> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

También puede intentar usar la intención sin extras.

Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(imageCaptureIntent, REQUEST_IMAGE_CAPTURE); 

El mapa de bits resultante será más pequeño, pero al menos puede intentarlo para ver si funciona. Espero que ayude.

Saludos,

3

No es necesario el permiso de la cámara cuando el lanzamiento de la intención de la aplicación de la cámara. Sin embargo, este es un proceso muy fragmentado en la plataforma de Android. He tenido muchos problemas con eso. Básicamente, si revisas el archivo extra que enviaste a la aplicación de la cámara notarás que su tamaño es de 0 bytes cuando el resultado regrese. este error existe en muchos dispositivos Android y usted es una solución para solucionar la mayoría y es cuando esto falla (esto significa que no se devuelve salida adicional parcelable y si es así el archivo adicional no se crea o con longitud 0 entonces necesitas obtener el Uri de la intención como: intent.getData(); esto devolverá un uri al archivo que básicamente se forma de la misma manera que el Uri de salida extra para que luego puedas usar el mismo enfoque para obtener la imagen .

Usted notará la imagen se almacena dentro del proveedor Media.Images y en el directorio de la cámara y la OFC apuntando intent.getData() Uri allí.

Espero que esto ayude. no se olvide de votar : D.

+0

Gracias por su respuesta. No puedo obtener los datos de Intent porque la cámara no devuelve el control a mi aplicación. El onActivityResult() nunca se llama después de tomar una foto. – PipiBadenas

+0

¿inicia la aplicación de la cámara con startActivityForResult (intento)? oh, como veo que eres ... pero debería devolver al menos algún tipo de resultado ... cuando regresas a una actividad que llamó a otra para obtener un resultado siempre obtienes un resultado: D. esa es la regla ... puede ser Activity.Cancel o Activity.Ok o algún otro código de terceros ... – DArkO

+0

Pero aún existe la posibilidad de que la aplicación de la cámara no funcione de manera estándar. Por lo que he visto hasta ahora, no hay una intención/forma definida de Android para obtener resultados de la intención de la cámara. todo depende de la implementación del fabricante. a pesar de que se esfuerzan por hacerlo posible, fallan la mayoría de las veces y esa es la fea verdad, especialmente en versiones beta y lanzamientos tempranos. – DArkO

2

Yo estaba muy frustrado por esto también. Sin embargo, encontré una solución (bastante lamentable).

Debo decir, inmediatamente, que no estaba usando el ACTION_IMAGE_CAPTURE Intent estándar. Debido a que quería tener la imagen de la cámara en una ventana, he usado mi propio diseño y he utilizado la siguiente plantilla:

How to Program the Google Android Camera to Take Pictures

Al tocar la pantalla llama a la función Camera.PictureCallbackonPictureTaken (byte [] imageData, Camera c), que es donde tomo el byte [] que contiene la imagen. Tengo una variable global "byte [] MainApplication.snapshotBytes" asignada por imageData desde esta función.

Ahora que los datos se han guardado globalmente, y están disponibles para la actividad de llamada, ¿cómo debe terminarse la actividad actual para que se notifique la actividad de llamada? Bueno, hay varias maneras, pero me di cuenta desde el principio que presionar el botón Atrás todavía llama al OnActivityResult (...). Entonces, hice lo siguiente:

if (imageData != null) 
    {  
     MainApp.snapshotBytes = imageData; 

     setResult(RESULT_OK); 
     onBackPressed(); 
    } 

La actividad de llamada ahora era responsable de tres cosas más.

1: Establece MainApp.snapshotBytes = null antes de iniciar la actividad de la cámara.

2: Cuando se llama el onActivityResult (...), primero se comprueba la resultCode * == RESULT_OK * y, a continuación, hizo uso de los datos de imagen que se almacena en los MainApp.snapshotBytes globales.

3: Finalmente, configuró MainApp.snapshotBytes = null nuevamente para que la memoria pueda ser recuperada por GC.

Voy a ser el primero en admitir que es un error, pero funciona y es compatible con o sin el error Camera-null-Intent.

Espero que esto ayude!

Cuestiones relacionadas