2012-10-10 30 views
8

Tengo una aplicación que funciona a pleno rendimiento. Simplemente tiene 1 problema con mi Intención de cámara o permisos.La actividad de la cámara Android no regresa a mi aplicación cuando se presiona el botón Aceptar

Se supone que la aplicación debe iniciar la Actividad de la cámara cuando el usuario presiona un botón. Eso funciona bien, pero cuando el usuario acepta una imagen haciendo clic en el botón Aceptar de la cámara, no vuelve a mi aplicación. Si presionan el botón cancelar en la cámara, vuelve a mi aplicación como se esperaba.

He leído todas las preguntas similares que puedo encontrar aquí, pero ninguna de ellas ha solucionado mi problema. Necesito decirle a la cámara dónde guardar la imagen porque quiero alternar entre 2 en mi aplicación. Aquí está el código que crea la Intención de la cámara y la inicia:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath)); 
startActivityForResult(intent, 11); 

He intentado varios valores para imagePath (que es una cadena), pero el botón OK de la cámara no ha trabajado con ninguno de ellos. Estos son los caminos que he probado:

/mnt/sdcard/<appName>/cameraImages/image1.jpg 
from Environment.getExternalStorageDirectory() 

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg 
from context.getExternalCacheDir() 

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg 
from context.getCacheDir() 

que tener los siguientes permisos en mi archivo de manifiesto:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.flash" android:required="false" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

pueden ustedes ayudar a averiguar qué le pasa a mi código, o me dice lo un camino válido podría ser? Prefiero que la imagen se almacene en una ubicación de caché porque no es importante que la imagen continúe existiendo después de que el usuario abandona la aplicación, pero realmente no me importa quién tenga acceso a la imagen.

Estoy haciendo todas las pruebas en el emulador de 4.1, compilando con el 4.1 SDK, y mi versión mínima es API 8 (2.2).

He puesto un caso para la intención en onActivityResult(), pero no creo que ustedes necesiten ver ese código porque no debería estar afectando el problema.

+0

verifica en el dispositivo real una vez. y también marque [this] (http://stackoverflow.com/a/7224771/646806) – RobinHood

+0

¿Se llama a 'onActivityResult()'? ¿Puedes ver algo en los registros? –

+0

Alguien verificó la versión de la aplicación usando 'context.getCacheDir()' para 'imagePath' y tuvieron exactamente la misma experiencia; el botón Aceptar en la aplicación de la cámara no funcionaría para ellos. Además, 'onActivityResult()' no se llama cuando presiono el botón OK. – cmasupra

Respuesta

2

Pude resolver el problema. Parece que en lugar de usar Uri.parse(imagePath), debe usar Uri.fromFile(new File(imagePath)) cuando agrega el extra. Puse el nuevo código de intención a continuación en caso de que ayude a alguien con el mismo problema.

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imagePath))); 
startActivityForResult(intent, 11); 

ahora estoy utilizando con éxito context.getExternalCacheDir() para crear la ruta completa imagePath. La ruta resultante que creé es /mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg.

+0

Estoy usando Uri.fromFile (nuevo archivo (imagePath)) pero aún tengo el mismo problema ... ¿puede usted aclararme sobre ese problema? Por favor, su ayuda es muy apreciada. –

+0

@NilayOnAndroid Asegúrese de que la variable 'imagePath' es una ruta válida a la que su aplicación tiene acceso. – cmasupra

+1

@ cmasupra-¡Como resulta que necesitaba mkdirs() primero para crear ese camino! Pero gracias por la ayuda !! –

Cuestiones relacionadas