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
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>
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"/>