SlideShare una empresa de Scribd logo
Tracking con Android, pgws y OpenLayers




                         (Introducción a la programación con Android
racking con Android, pgws y OpenLayers
                                                      (Introducción a la programación con Andro




MercatorLab S.L. Distribuye este documento bajo licencia Creative Commons Reconocimiento, Compartir, Igual 3

Los términos de la licencia se pueden consultar en:

       http://creativecommons.org/licenses/by-sa/3.0/

Enero 2011)
Introducción: ¿Quien soy yo?
¿Quien soy yo?
Santiago Higuera de Frutos, nacido 1960, Ingeniero
 de Caminos, Marino y Geoinquieto

¿Que hago ahora?
Sacar adelante mi empresa MercatorLab S.L., un
  negocio dedicado al desarrollo de aplicaciones LBS
  (Location Based Services) basadas en software
  libre y a la formación y consultoría en temas GIS
  Open Source.
Terminar mi doctorado en la Escuela de Caminos de
  Madrid, con tesis acerca de los GPS's, la geometría
  de las carreteras y los algoritmos genéticos.

 Algunos enlaces
 Algo parecido a un currículum: http://ingemoral.es/docs/curriculo_2011.pdf
 MercatorLab: http://mercatorlab.com
 Twitter : https://twitter.com/#!/santiagohiguera
 Email: shiguera@mercatorlab.com
Introducción: ¿De que va este taller?
Introducción a Android
Durante el taller se repasarán los conceptos básicos de la
 programación con Android.

Ejemplo de uso : Trolpical
Realizaremos un programa de tracking que permite ir leyendo la
 posición del GPS del dispositivo Android y transmitir dichas
 posiciones vía internet a la base de datos postgres alojada
 en un servidor.

pgws.php
El módulo pgws (PostGres Web Service), alojado en el servidor, proporciona un acceso a
  la base de datos desde cualquier lenguaje de programación, vía peticiones HTTP POST
  o HTTP GET

pgws.js
Para clientes Javascript se puede utilizar una capa intermedia, pgws.js, escrita en
 Javascript, y que facilita el acceso a postgres sin necesidad de hacer peticiones
 directas a pgws.php
Indice

1 .- Android: ¿Que es Android?
2 .- Instalación: SDK, Eclipse, ADT, AVD
3 .- El programa 'Hola Mundo Android'
4 .- Activity, Layout, Resources
5 .- Etiquetas, Campos y Botones
6 .- Actividades
7 .- Acceso a Internet
8 .- Acceso a servicios de localización
9 .- pgws
10 .- Trolpitrack
11 .- pgws.js
12 .- Clientes Javascript y OpenLayers
13 .- Mejoras a Trolpitrack
1.- ¿Qué es Android?
2.- Instalación: SDK, Eclipse, ADT, AVD
.-
3.- El programa Hola Mundo
Para entrar en el asistente de creación de proyectos desde el menú de Eclipse:
                   File → New → Other → Android → Android Project


   Nombre del                      Versión del API
     proyecto                           destino                          package
3.- El programa Hola Mundo Android
/AndroidManifest.xml             /src/.../HolaMundoActivity.java




                                     /res/layout/main.xml
    /res/values/strings.xml
4.- Activity, Layout, Resources
4.- Activity, Layout, Resources
5.- Widgets: Etiquetas, campos, botones




En Android nos podremos encontrar con distintos tamaños y densidades de pantalla. Las densidades habituales, medidas en
   textit{dpi}, textit{puntos por pulgada}, son: begin{itemize} item textbf{Baja densidad}: (textit{ldpi}) Con densidad de 120
   dpi item textbf{Densidad media} (textit{mdpi}) Con densidad de 160 dpi item textbf{Alta densidad} (textit{hdpi}) Con
   densidad de 240 dpi end{itemize} En cuanto a los tamaños de las pantallas nos podemos encontrar con: begin{itemize} item
   textbf{Pantallas Pequeñas}         begin{itemize}                   item textbf{QVGA} Con 240x320 pixels y densidad baja, 120
   dpi         end{itemize} item textbf{Pantallas normales}           begin{itemize}                 item textbf{WQVGA} Con
   240x400 pixels y densidad baja, 120 dpi                   item textbf{FWQVGA} Con 240x432 pixels y densidad baja, 120 dpi
           item textbf{HVGA} Con 320x480 pixels y densidad media, 160 dpi                   item textbf{WVGA} Con 480x800 pixels y
   densidad alta, 240 dpi                  item textbf{FWVGA} Con 480x854 pixels y densidad alta, 240 dpi          end{itemize}
   item textbf{Pantallas grandes}          begin{itemize}                  item textbf{WVGA} Con 480x800 pixels y densidad media,
   160 dpi                 item textbf{FWVGA} Con 480x854 pixels y densidad alta, 160 dpi           end{itemize} end{itemize}
.- Unidades de medida en pantalla
dp (Density-independent Pixels) (también vale 'dip') Unidades relativas a una pantalla
  de 160 pixels por pulgada. Cualquiera que sea la densidad de puntos del dispositivo
  la representación de los elementos se hará de forma que 160dp sean 1 pulgada en
  el dispositivo
sp (Scale-independent Pixels) Es parecida al anterior, pero tiene en cuenta las
  preferencias del usuario en cuanto a tamaño de fuentes. Opción recomendada para
  para el tamaño de las fuentes.
pt (Points) Equivalen 1/72 de pulgada con relación al tamaño físico real en pantalla.
px (Pixels) Son pixels de la pantalla del dispositivo. No es recomendable pues cada
  dispositivo puede tener diferentes densidades de pixels por pulgada así como
  diferentes dimensiones totales en pixels.
mm (Milimeters) Milimetros reales en la salida de la pantalla del dispositivo.
in (Inches) Pulgadas reales en la salida de la pantalla del dispositivo.
.- Tamaños y densidades de pantallas
Densidades en Puntos por pulgada (dpi):
Baja densidad (ldpi) : Con densidad de 120 dpi
Densidad media (mdpi) Con densidad de 160 dpi
Alta densidad (hdpi) Con densidad de 240 dpi

Tamaños de pantallas:
Pantallas Pequeñas
  QVGA: Con 240x320 pixels y densidad baja, 120 dpi
Pantallas normales
  WQVGA: Con 240x400 pixels y densidad baja, 120 dpi
  FWQVGA: Con 240x432 pixels y densidad baja, 120 dpi
  HVGA: Con 320x480 pixels y densidad media, 160 dpi
  WVGA: Con 480x800 pixels y densidad alta, 240 dpi
  FWVGA: Con 480x854 pixels y densidad alta, 240 dpi
Pantallas grandes:
 WVGA: Con 480x800 pixels y densidad media, 160 dpi
 FWVGA: Con 480x854 pixels y densidad alta, 160 dpi
.- Tamaños y densidades de pantallas
El uso de distintas pantallas se habilita en el AndroidManifest.xml
      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.siglibre.examples"
        android:versionCode="1" android:versionName="1.0" >
        <uses-sdk android:minSdkVersion="7" />
        <supports-screens
               android:smallScreens="false"
               android:normalScreens="true"
               android:largeScreens="false"
               android:anyDensity="true"/>
        <application
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name" >
          <activity
             android:name=".TestDisplayActivity"
             android:label="@string/app_name" >
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
          </activity>
        </application>
      </manifest>
5.- Widgets: Etiquetas, campos, botones
.- Eventos y oyentes
Un oyente de un evento es un interface existente en la clase View que contiene un
  único método de callback.
Estos métodos son llamados por Android cuando el View que tiene registrado el oyente es
  activado por el usuario al actuar sobre el item en el interface de usuario. (Por ejemplo,
  si el View es un Button, el oyente se disparará cuando el usuario pulse el botón).

         Cada evento tiene su interface oyente y su función de callback:


   Interface oyente                           Método Callback
   View.OnClickListener                       onClick()
   View.OnLongClickListener                   onLongClick()
   View.OnFocusChangeListener                 onFocusChange()
   View.OnKeyListener                         onKey()
   View.OnTouchListener                       onTouch()
   View.OnCreateContextMenuListener           onCreateContextMenu()
.- Notificaciones: Toast
Toast: Notificación que una vez mostrada desaparece sin intervención del usuario.

    Toas t . make Te xt ( Hol aM o. t hi s , "He l l o Toas t ", 2000) . s how( ) ;
                                und




  Toast: Notificación que una vez mostrada desaparece sin intervención del usuario.


  AlertDialog: Diálogo de notificación con botones para aceptar, cancelar.
.- Notificaciones: AlertDialog
AlertDialog: Diálogo de notificación con botones para aceptar, cancelar.

   ne w Al e rt Di al og. Bui l d e r( t hi s )
         . s e t Ti t l e ( "M s s age De mo")
                              e
         . s e t M s s age ( "Are you s ure you want t o e xi t ?")
                   e
         . s e t Ne ut ral But t on( "Cl os e ", ne w Di al ogI nt e rf ace . OnCl i ckLi s t e ne r( ) {
                 publ i c voi d onCl i ck( Di al ogI nt e rf ace d l g, i nt s umt hi n) {
                          // no hay que hace r nad a, s e ci e rra s ol o
                 }
   } ) . s how( ) ;
6.- Actividades
7.- Acceso a Internet
Esquema general para acceder a Internet:
Crear un HttpClient (o acceder a una referencia de uno
  existente)
Instanciar un nuevo método PostMethod o GetMethod
Ajustar los parámetros HTTP, parejas nombre/valor
Ejecutar la llamada HTTP a través del HttpClient
Procesar la respuesta HTTP

  Hay que autorizar a la aplicación el acceso a Internet en el
                     AndroidManifest.xml

                   <uses-permission
      android:name="android.permission.INTERNET"/>
7.- Acceso a Internet
8.- Acceso a servicios de localización
9.- pgws
10.- Trolpitrack
11.- pgws.js
12.- Clientes Javascript-OpenLayers
13.- Mejoras a Trolpical

Más contenido relacionado

PPTX
Optimize map renderer !
PDF
Calculator 5
ODP
Taller mapsforge
PPTX
Un atlas en la palma de la mano
PDF
[Android devcamp] Android Bootcamp – 2012
PDF
Calculator 1
PDF
OpenStreetMap en Android
PDF
Live code manual Español
Optimize map renderer !
Calculator 5
Taller mapsforge
Un atlas en la palma de la mano
[Android devcamp] Android Bootcamp – 2012
Calculator 1
OpenStreetMap en Android
Live code manual Español

Similar a Taller livetrackingandroid (20)

PDF
Desarrollo en Android: Conceptos Básicos
PDF
239984949 curso-android-pptx
PPTX
Introducción a Android
PDF
Tema 4 3_1_interfaces_de_usuario
PDF
Taller Android seedrocket
PPT
Curso de programacion en android
PDF
MobileCONGalicia Introducción a Android
ODP
Android Pres3
PDF
Deletreando Android
PDF
Introducción a Android: 10 cosas importantes que hay que entender
KEY
Android la plataforma móvil open source
PPTX
Curso Iniciacion android
PDF
Manual programacion Android
PDF
Manual programacion-android-v2
PDF
Manual programación android
PDF
Curso programacion android sgoliver net v2.0
PDF
Manual programación android [sgoliver.net] v2.0
PDF
Manual programación android [sgoliver.net] v2.0
PPSX
Aplicaciones android
DOCX
Elementos de eclipse
Desarrollo en Android: Conceptos Básicos
239984949 curso-android-pptx
Introducción a Android
Tema 4 3_1_interfaces_de_usuario
Taller Android seedrocket
Curso de programacion en android
MobileCONGalicia Introducción a Android
Android Pres3
Deletreando Android
Introducción a Android: 10 cosas importantes que hay que entender
Android la plataforma móvil open source
Curso Iniciacion android
Manual programacion Android
Manual programacion-android-v2
Manual programación android
Curso programacion android sgoliver net v2.0
Manual programación android [sgoliver.net] v2.0
Manual programación android [sgoliver.net] v2.0
Aplicaciones android
Elementos de eclipse
Publicidad

Último (20)

DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
CyberOps Associate - Cisco Networking Academy
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PPTX
El uso de las TIC en la vida cotidiana..
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PPTX
Presentación de Redes de Datos modelo osi
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
CyberOps Associate - Cisco Networking Academy
Documental Beyond the Code (Dossier Presentación - 2.0)
capacitación de aire acondicionado Bgh r 410
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
informe_fichas1y2_corregido.docx (2) (1).pdf
Historia Inteligencia Artificial Ana Romero.pptx
Estrategia de Apoyo de Daylin Castaño (5).pdf
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
TRABAJO DE TECNOLOGIA.pdf...........................
Guía 5. Test de orientación Vocacional 2.docx
El uso de las TIC en la vida cotidiana..
historia_web de la creacion de un navegador_presentacion.pptx
Presentación de Redes de Datos modelo osi
Presentacion de Alba Curso Auditores Internos ISO 19011
Publicidad

Taller livetrackingandroid

  • 1. Tracking con Android, pgws y OpenLayers (Introducción a la programación con Android
  • 2. racking con Android, pgws y OpenLayers (Introducción a la programación con Andro MercatorLab S.L. Distribuye este documento bajo licencia Creative Commons Reconocimiento, Compartir, Igual 3 Los términos de la licencia se pueden consultar en: http://creativecommons.org/licenses/by-sa/3.0/ Enero 2011)
  • 3. Introducción: ¿Quien soy yo? ¿Quien soy yo? Santiago Higuera de Frutos, nacido 1960, Ingeniero de Caminos, Marino y Geoinquieto ¿Que hago ahora? Sacar adelante mi empresa MercatorLab S.L., un negocio dedicado al desarrollo de aplicaciones LBS (Location Based Services) basadas en software libre y a la formación y consultoría en temas GIS Open Source. Terminar mi doctorado en la Escuela de Caminos de Madrid, con tesis acerca de los GPS's, la geometría de las carreteras y los algoritmos genéticos. Algunos enlaces Algo parecido a un currículum: http://ingemoral.es/docs/curriculo_2011.pdf MercatorLab: http://mercatorlab.com Twitter : https://twitter.com/#!/santiagohiguera Email: shiguera@mercatorlab.com
  • 4. Introducción: ¿De que va este taller? Introducción a Android Durante el taller se repasarán los conceptos básicos de la programación con Android. Ejemplo de uso : Trolpical Realizaremos un programa de tracking que permite ir leyendo la posición del GPS del dispositivo Android y transmitir dichas posiciones vía internet a la base de datos postgres alojada en un servidor. pgws.php El módulo pgws (PostGres Web Service), alojado en el servidor, proporciona un acceso a la base de datos desde cualquier lenguaje de programación, vía peticiones HTTP POST o HTTP GET pgws.js Para clientes Javascript se puede utilizar una capa intermedia, pgws.js, escrita en Javascript, y que facilita el acceso a postgres sin necesidad de hacer peticiones directas a pgws.php
  • 5. Indice 1 .- Android: ¿Que es Android? 2 .- Instalación: SDK, Eclipse, ADT, AVD 3 .- El programa 'Hola Mundo Android' 4 .- Activity, Layout, Resources 5 .- Etiquetas, Campos y Botones 6 .- Actividades 7 .- Acceso a Internet 8 .- Acceso a servicios de localización 9 .- pgws 10 .- Trolpitrack 11 .- pgws.js 12 .- Clientes Javascript y OpenLayers 13 .- Mejoras a Trolpitrack
  • 6. 1.- ¿Qué es Android?
  • 7. 2.- Instalación: SDK, Eclipse, ADT, AVD
  • 8. .-
  • 9. 3.- El programa Hola Mundo Para entrar en el asistente de creación de proyectos desde el menú de Eclipse: File → New → Other → Android → Android Project Nombre del Versión del API proyecto destino package
  • 10. 3.- El programa Hola Mundo Android /AndroidManifest.xml /src/.../HolaMundoActivity.java /res/layout/main.xml /res/values/strings.xml
  • 13. 5.- Widgets: Etiquetas, campos, botones En Android nos podremos encontrar con distintos tamaños y densidades de pantalla. Las densidades habituales, medidas en textit{dpi}, textit{puntos por pulgada}, son: begin{itemize} item textbf{Baja densidad}: (textit{ldpi}) Con densidad de 120 dpi item textbf{Densidad media} (textit{mdpi}) Con densidad de 160 dpi item textbf{Alta densidad} (textit{hdpi}) Con densidad de 240 dpi end{itemize} En cuanto a los tamaños de las pantallas nos podemos encontrar con: begin{itemize} item textbf{Pantallas Pequeñas} begin{itemize} item textbf{QVGA} Con 240x320 pixels y densidad baja, 120 dpi end{itemize} item textbf{Pantallas normales} begin{itemize} item textbf{WQVGA} Con 240x400 pixels y densidad baja, 120 dpi item textbf{FWQVGA} Con 240x432 pixels y densidad baja, 120 dpi item textbf{HVGA} Con 320x480 pixels y densidad media, 160 dpi item textbf{WVGA} Con 480x800 pixels y densidad alta, 240 dpi item textbf{FWVGA} Con 480x854 pixels y densidad alta, 240 dpi end{itemize} item textbf{Pantallas grandes} begin{itemize} item textbf{WVGA} Con 480x800 pixels y densidad media, 160 dpi item textbf{FWVGA} Con 480x854 pixels y densidad alta, 160 dpi end{itemize} end{itemize}
  • 14. .- Unidades de medida en pantalla dp (Density-independent Pixels) (también vale 'dip') Unidades relativas a una pantalla de 160 pixels por pulgada. Cualquiera que sea la densidad de puntos del dispositivo la representación de los elementos se hará de forma que 160dp sean 1 pulgada en el dispositivo sp (Scale-independent Pixels) Es parecida al anterior, pero tiene en cuenta las preferencias del usuario en cuanto a tamaño de fuentes. Opción recomendada para para el tamaño de las fuentes. pt (Points) Equivalen 1/72 de pulgada con relación al tamaño físico real en pantalla. px (Pixels) Son pixels de la pantalla del dispositivo. No es recomendable pues cada dispositivo puede tener diferentes densidades de pixels por pulgada así como diferentes dimensiones totales en pixels. mm (Milimeters) Milimetros reales en la salida de la pantalla del dispositivo. in (Inches) Pulgadas reales en la salida de la pantalla del dispositivo.
  • 15. .- Tamaños y densidades de pantallas Densidades en Puntos por pulgada (dpi): Baja densidad (ldpi) : Con densidad de 120 dpi Densidad media (mdpi) Con densidad de 160 dpi Alta densidad (hdpi) Con densidad de 240 dpi Tamaños de pantallas: Pantallas Pequeñas QVGA: Con 240x320 pixels y densidad baja, 120 dpi Pantallas normales WQVGA: Con 240x400 pixels y densidad baja, 120 dpi FWQVGA: Con 240x432 pixels y densidad baja, 120 dpi HVGA: Con 320x480 pixels y densidad media, 160 dpi WVGA: Con 480x800 pixels y densidad alta, 240 dpi FWVGA: Con 480x854 pixels y densidad alta, 240 dpi Pantallas grandes: WVGA: Con 480x800 pixels y densidad media, 160 dpi FWVGA: Con 480x854 pixels y densidad alta, 160 dpi
  • 16. .- Tamaños y densidades de pantallas El uso de distintas pantallas se habilita en el AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.siglibre.examples" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="false" android:anyDensity="true"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".TestDisplayActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
  • 17. 5.- Widgets: Etiquetas, campos, botones
  • 18. .- Eventos y oyentes Un oyente de un evento es un interface existente en la clase View que contiene un único método de callback. Estos métodos son llamados por Android cuando el View que tiene registrado el oyente es activado por el usuario al actuar sobre el item en el interface de usuario. (Por ejemplo, si el View es un Button, el oyente se disparará cuando el usuario pulse el botón). Cada evento tiene su interface oyente y su función de callback: Interface oyente Método Callback View.OnClickListener onClick() View.OnLongClickListener onLongClick() View.OnFocusChangeListener onFocusChange() View.OnKeyListener onKey() View.OnTouchListener onTouch() View.OnCreateContextMenuListener onCreateContextMenu()
  • 19. .- Notificaciones: Toast Toast: Notificación que una vez mostrada desaparece sin intervención del usuario. Toas t . make Te xt ( Hol aM o. t hi s , "He l l o Toas t ", 2000) . s how( ) ; und Toast: Notificación que una vez mostrada desaparece sin intervención del usuario. AlertDialog: Diálogo de notificación con botones para aceptar, cancelar.
  • 20. .- Notificaciones: AlertDialog AlertDialog: Diálogo de notificación con botones para aceptar, cancelar. ne w Al e rt Di al og. Bui l d e r( t hi s ) . s e t Ti t l e ( "M s s age De mo") e . s e t M s s age ( "Are you s ure you want t o e xi t ?") e . s e t Ne ut ral But t on( "Cl os e ", ne w Di al ogI nt e rf ace . OnCl i ckLi s t e ne r( ) { publ i c voi d onCl i ck( Di al ogI nt e rf ace d l g, i nt s umt hi n) { // no hay que hace r nad a, s e ci e rra s ol o } } ) . s how( ) ;
  • 22. 7.- Acceso a Internet Esquema general para acceder a Internet: Crear un HttpClient (o acceder a una referencia de uno existente) Instanciar un nuevo método PostMethod o GetMethod Ajustar los parámetros HTTP, parejas nombre/valor Ejecutar la llamada HTTP a través del HttpClient Procesar la respuesta HTTP Hay que autorizar a la aplicación el acceso a Internet en el AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/>
  • 23. 7.- Acceso a Internet
  • 24. 8.- Acceso a servicios de localización
  • 29. 13.- Mejoras a Trolpical