Skip to content
Christian Gastrell edited this page May 19, 2015 · 4 revisions

org.apache.cordova.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).

Event Handler vs Callback

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).

Instalacion

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

Descripcion

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 funcion successCallback
    • 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;

Opciones

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
};

Uso

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

  1. Repaso y conceptos basicos
  2. Ejercicios para repasar
  3. Problematica de desarrollo mobile
  4. Phonegap
  5. Requerimientos e instalacion
  6. Phonegap CLI
  7. [Primeros ejercicios con Phonegap](Ejercicio Phonegap)
  8. Plugins
  9. Hello world
  10. Estructura de un proyecto Phonegap
  11. Plugin Device
  12. Debugging
  13. Incorporando un framework CSS
  14. Plugin Vibration
  15. Sumando partes
  16. Plugin Battery Status
  17. Un poco de jQuery
  18. jQuery Mobile
  19. Navegacion
  20. Plugin Dashboard
  21. Revision de Plugin Dashboard
  22. Paginas extra
  23. ToDo
  24. Persistencia
  25. ToDo Persistente
  26. Plugin Camera
  27. Opciones de camara
  28. App Mi Galeria
  29. Revision de Galeria
  30. Plugin File
  31. Escribir y leer texto
  32. Escribir archivos binarios
  33. Guardando fotos
  34. Debugger: weinre
  35. Inspeccionar con weinre
  36. Phonegap Developer App
  37. Refactor de apps
  38. Plugin Media
  39. Pruebas con audio
  40. Control y monitoreo de audio
  41. Encapsular play/pausa
  42. Hacks
  43. Formato de tiempos
  44. Grabar y reproducir
  45. Proyecto Integrador
  46. Revision de interfaz
  47. Interfaz basica
  48. Entrevista: modelo
  49. Funcionalidad: revision
  50. Seleccion de framework
  51. iRec: navegacion
  52. iRec: fileApi
  53. iRec: guias
  54. iRec: entrevistas
  55. iRec: recordApi
  56. iRec: helpers
  57. iRec: mediaApi
  58. iRec: inicializar paginas
  59. iRec: refactor
  60. iRec: mediaApi refactor
  61. iRec: recordApi refactor
  62. iRec: helpers
  63. iRec: guias.js
  64. iRec: entrevistas.js
  65. iRec: crear guias
  66. iRec: re-inicializando
  67. iRec: re-ordenando
  68. iRec: pendientes
  69. iRec: reporte ux
  70. iRec:revision: volver
  71. iRec:entrevista: volver
  72. iRec:revision: cambios
  73. iRec:revision: stop
  74. iRec:revision: Rew 10"
  75. iRec:revision: tag Go
  76. iRec: limpieza
  77. Firma de apps
  78. Android
  79. Generacion de key
  80. Firma de apk
  81. Alineacion de zip
  82. Firmar con Phonegap
  83. iOS
  84. Detalles finales
  85. Config.xml
  86. Iconos
  87. Splash
Clone this wiki locally