-
Notifications
You must be signed in to change notification settings - Fork 1
Plugin Camera
El plugin camera
nos dara acceso a la camara de fotos del dispositivo. Esto sera posible gracias a una API que nos permita llamar funciones de la camara para luego capturar el resultado (foto, error, opciones).
Ya vimos como manejar eventos (addEventListener
y jQuery.on
) y como se utiliza una funcion (Event Handler) para interactuar con el evento especificado. Otro concepto muy similar es el de callback.
Un callback es una funcion que atiende la respuesta de un comando. Es decir, ejecutamos el comando, pero este no nos devuelve un valor, este comando espera que nosotros le digamos que hacer con el resultado. Este resultado debe estar especificado en la documentacion del comando.
Este tipo de funcionalidad es implicita en las APIs que ejecutan llamadas entre dos interfaces/plataformas o bien cuando se trata de una llamada remota. La ventaja de usar un callback radica en no tener que frenar el codigo de la aplicacion que lo implementa, similar al manejo de eventos.
En este caso en particular, utilizando la camara del dispositivo, al comando que accederemos sera getPicture
y veremos que los parametros que debemos utilizar son, en lugar de valores comunes, funciones para manejar la respuesta de la camara (foto, error, cancel).
Para probar el plugin crearemos un proyecto basado en jQuery Mobile:
phonegap create prueba10 --id com.coderhouse.prueba10 --name "00 Prueba 10" -src templates\jqm
Recuerdan como instalar un plugin? Este se encuentra en templates\org.apache.cordova.camera
:
cd prueba10
phonegap plugin add ..\templates\org.apache.cordova.camera
La funcion camera.getPicture
permite abrir la aplicacion de camara del dispositivo, tomar o elegir una foto, y luego hacer algo con esa foto. Los parametros que recibe son siempre los mismos:
- success callback: funcion que se ejecuta cuando la seleccion fue completada
- error callback: funcion que se ejecuta cuando hubo un error o se cancelo la seleccion
- options: objeto con opciones de camara
Si bien los callbacks son siempre los mismos, como se comporten dependera de las opciones que pasemos a getPicture
. Las opciones mas comunes son:
-
Camera.PictureSourceType
: Define de donde provendra la foto-
CAMERA
: abrira la aplicacion de camara para tomar una foto -
PHOTOLIBRARY
o `SAVEDPHOTOALBUM': ambas abriran la camara para seleccionar una foto de la galeria del dispositivo
-
-
Camera.DestinationType
: Define que tipo de valor recibira la funcionsuccessCallback
-
DATA_URL
: el callback recibira la imagen encodeada en Base64 -
FILE_URI
: el callback recibira el URI de la imagen en el sistema de archivos del dispositivo
-
Nota: si bien en Javascript no existen constantes se respeta la convencion de usar variables en mayusculas para denotar variables que han sido provistas por la API y no deberian cambiar su valor. En si, representas valores simples:
Camera.DestinationType.DATA_URL = 0;
Camera.DestinationType.FILE_URI = 1;
Camera.DestinationType.NATIVE_URI = 2;
El resto de las opciones son legibles, la informacion completa se encuentra en la pagina del plugin: org.apache.cordova.camera. Estos son los valores por defecto de las opciones:
{
quality : 75,
destinationType : Camera.DestinationType.DATA_URL,
sourceType : Camera.PictureSourceType.CAMERA,
allowEdit : true,
encodingType: Camera.EncodingType.JPEG,
mediaType: Camera.MediaType.PICTURE,
correctOrientation:
popoverOptions: CameraPopoverOptions, //iOS only
saveToPhotoAlbum: false
};
En la aplicacion que creamos en el directorio prueba10
tendremos un esqueleto basico con jQuery Mobile.
Por probar la funcionalidad usaremos una pagina con un boton Sacar foto. Para esto, editaremos el archivo www/index.html
:
<div data-role="page" id="home">
<div data-role="header">
<h1>Galeria de fotos</h1>
</div>
<div data-role="content" class="galeria">
<!-- imagen -->
<img src="icon.png">
</div>
<div data-role="footer" data-position="fixed">
<!-- botones en el footer -->
<a href="#" id="sacarfoto" class="ui-btn ui-icon-camera ui-btn-icon-left">Sacar foto</a>
</div>
</div>
Luego editaremos el archivo www/js/index.js
, donde incluiremos un objeto para contener la funcionalidad. Agregamos una variable al principio del archivo:
var camara = {
initialize: function() {
camara.defaults = {
quality : 50,
destinationType : Camera.DestinationType.DATA_URL,
sourceType : Camera.PictureSourceType.CAMERA,
allowEdit : true,
encodingType: Camera.EncodingType.JPEG,
// targetWidth: 100,
// targetHeight: 100,
popoverOptions: CameraPopoverOptions,
saveToPhotoAlbum: false
};
$('#sacarfoto').on('click', camara.sacarFoto);
},
sacarFoto: function() {
navigator.camera.getPicture(camara.onDataUrlSuccess, camara.onError, camara.defaults);
},
onDataUrlSuccess: function(imageData) {
// cuando la camara se cierre se ejecutara esta funcion
// y usaremos "imageData" como src del tag <img>
$('img').attr('src', "data:image/jpeg;base64," + imageData);
},
onError: function(message){
alert('Error: ' + message);
}
};
Correr el proyecto y verificar que el boton abra la camara y luego la foto se vea en nuestra aplicacion.
phonegap run android
Si todo salio bien, cuando saquemos una foto deberia verse una imagen inmensa en la aplicacion. Continuar
- Repaso y conceptos basicos
- Ejercicios para repasar
- Problematica de desarrollo mobile
- Phonegap
- Requerimientos e instalacion
- Phonegap CLI
- [Primeros ejercicios con Phonegap](Ejercicio Phonegap)
- Plugins
- Hello world
- Estructura de un proyecto Phonegap
- Plugin Device
- Debugging
- Incorporando un framework CSS
- Plugin Vibration
- Sumando partes
- Plugin Battery Status
- Un poco de jQuery
- jQuery Mobile
- Navegacion
- Plugin Dashboard
- Revision de Plugin Dashboard
- Paginas extra
- ToDo
- Persistencia
- ToDo Persistente
- Plugin Camera
- Opciones de camara
- App Mi Galeria
- Revision de Galeria
- Plugin File
- Escribir y leer texto
- Escribir archivos binarios
- Guardando fotos
- Debugger: weinre
- Inspeccionar con weinre
- Phonegap Developer App
- Refactor de apps
- Plugin Media
- Pruebas con audio
- Control y monitoreo de audio
- Encapsular play/pausa
- Hacks
- Formato de tiempos
- Grabar y reproducir
- Proyecto Integrador
- Revision de interfaz
- Interfaz basica
- Entrevista: modelo
- Funcionalidad: revision
- Seleccion de framework
- iRec: navegacion
- iRec: fileApi
- iRec: guias
- iRec: entrevistas
- iRec: recordApi
- iRec: helpers
- iRec: mediaApi
- iRec: inicializar paginas
- iRec: refactor
- iRec: mediaApi refactor
- iRec: recordApi refactor
- iRec: helpers
- iRec: guias.js
- iRec: entrevistas.js
- iRec: crear guias
- iRec: re-inicializando
- iRec: re-ordenando
- iRec: pendientes
- iRec: reporte ux
- iRec:revision: volver
- iRec:entrevista: volver
- iRec:revision: cambios
- iRec:revision: stop
- iRec:revision: Rew 10"
- iRec:revision: tag Go
- iRec: limpieza
- Firma de apps
- Android
- Generacion de key
- Firma de apk
- Alineacion de zip
- Firmar con Phonegap
- iOS
- Detalles finales
- Config.xml
- Iconos
- Splash