La actividad de la cámara Android no vuelve a mi aplicación cuando se pulsa el botón OK
Tengo una aplicación que está trabajando plenamente. Sólo tiene un problema con mi objetivo de cámara o permisos.
Se supone que la aplicación inicia la actividad de 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.
- ¿Cómo obtener la vista de un elemento en listview en android?
- La construcción de dos APK de un Android-Source-Tree
- Android "No se pudo encontrar el estilo 'mapViewStyle' en el tema actual" error
- ¿Cómo puedo reutilizar una clase interna en Java / Android?
- Convertir c # a puro java?
He leído todas las preguntas similares que puedo encontrar aquí, pero ninguna de ellas ha arreglado mi problema. Necesito decirle a la cámara exactamente dónde guardar la imagen porque quiero alternar entre 2 en mi aplicación. Aquí está el código que crea el objetivo de la cámara y lo 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 funcionado 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()
Tengo los permisos siguientes en mi archivo del 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 ayudarme a averiguar qué tiene de malo mi código, o decirme qué camino podría ser válido? 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 abandone la aplicación, pero realmente no me importa quién tiene acceso a la imagen.
Estoy haciendo todas las pruebas en el emulador 4.1, compilando con el SDK 4.1, 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 necesitan ver ese código porque no debería afectar el problema.
- El desplazamiento de la vista web de Android no funciona
- Manipule los bytes alfa de Java / color de Android int
- Cómo crear mapa de bits de GlSurfaceView
- Configuración de un ancho de TextView en java
- ¿Cuál debería ser el tiempo de espera de conexión estándar y el tiempo de espera del socket en android
- El método más rápido y eficiente para buscar los 3 primeros números?
- Cómo hacer que EditText no se enfoque al crear la actividad
- Error de ejecución de la tarea ': app: dexDebug'
Pude resolver el problema. Parece que en lugar de usar Uri.parse(imagePath)
, tienes que usar Uri.fromFile(new File(imagePath))
cuando agregas el extra. He puesto el nuevo código de intención abajo 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 context.getExternalCacheDir()
para crear la ruta de acceso completa imagePath
. La ruta resultante que he creado es /mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
.
El problema es que necesitas compartir tu archivo local (Application's internal) con la actividad de la cámara. Creación de un proveedor de contenido para este efecto es la única cosa que funcionó para mí. Vea la segunda opción aquí: http://dharmendra4android.blogspot.com/2012/04/save-captured-image-to-applications.html
- Google Analytics vuelve a consultar Proguard
- Obtención de 'E / TokenRequestor: Tiene configuraciones relacionadas con OAuth2 erróneas. Error detallado: INVALID_AUDIENCE 'incluso después de proporcionar identificaciones de cliente precisas