Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos...

26
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA Sensores de los dispositivos Sesión 2: Geolocalización y mapas

Transcript of Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos...

Page 1: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IA

Sensores de los dispositivos

Sesión 2: Geolocalización y mapas

Page 2: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Puntos a tratar• Geolocalización• Actualización de la posición• Alertas de proximidad• Geocoder• Mapas• Localización en el mapa• Marcadores• Reconocimiento del habla

2

Page 3: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Geolocalización

• Proveedores

• Permisos

3

<uses-­‐permission  android:name=        "android.permission.ACCESS_FINE_LOCATION"/>  <uses-­‐permission  android:name=        "android.permission.ACCESS_COARSE_LOCATION"/>

•GPS• Localización fina• Necesita

dispositivo GPS

•Red• Localización

aproximada• Usa la célula de la

red móvil

Page 4: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Obtener última localización

• Obtiene última posición registrada• No solicita actualizarla al proveedor

• El objeto Location proporciona

4

• Latitud• Longitud

• Altura• Velocidad

• etc ...

LocationManager  manager  =  (LocationManager)        this.getSystemService(Context.LOCATION_SERVICE);

Location  posicion  =  manager        .getLastKnownLocation(LocationManager.GPS_PROVIDER);

Page 5: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Obtener nueva posición

5

class  ListenerPosicion  implements  LocationListener  {        public  void  onLocationChanged(Location  location)  {                  //  Recibe  nueva  posición.        }        public  void  onProviderDisabled(String  provider){                  //  El  proveedor  ha  sido  desconectado.        }        public  void  onProviderEnabled(String  provider){                  //  El  proveedor  ha  sido  conectado.        }        public  void  onStatusChanged(String  provider,                                          int  status,  Bundle  extras){                //  Cambio  en  el  estado  del  proveedor.        }  };

Page 6: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Solicitar actualización de posición

• Registramos el listener

• Detenemos las actualizaciones

6

Puede tardar en obtener una primera posición

ListenerPosicion  listener  =  new  ListenerPosicion();long  tiempo  =  5000;  //  5  segundosfloat  distancia  =  10;  //  10  metros  manager.requestLocationUpdates(        LocationManager.GPS_PROVIDER,          tiempo,  distancia,  listenerPosicion);

manager.removeUpdates(listener);

Page 7: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Alertas de proximidad• Definimos un receptor de intents

• Programamos el aviso

7

public  class  ReceptorProximidad  extends  BroadcastReceiver  {    @Override    public  void  onReceive(Context  context,  Intent  intent)  {        //  Comprobamos  si  estamos  entrando  o  saliendo  de  la  proximidad        String  key  =  LocationManager.KEY_PROXIMITY_ENTERING;          Boolean  entra  =  intent.getBooleanExtra(key,  false);        ...    }}

Intent  intent  =  new  Intent(codigo);  PendingIntent  pi  =  PendingIntent.getBroadcast(this,  -­‐1,  intent,  0);manager.addProximityAlert(latitud,  longitud,  radio,                                                      caducidad,  pi);

IntentFilter  filtro  =  new  IntentFilter(codigo);  registerReceiver(new  ReceptorProximidad(),  filtro);

Page 8: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Geocoder

• Transforma entre coordenadas y dirección

8

Directo

“Universidad de Alicante”

[38.3852333,-0.51515]

Inverso

[38.3852333,-0.51515]

“Universidad de Alicante”

Page 9: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Uso del geocoder

• Obtener el objeto Geocoder

• Transformación directa

• Transformación inversa

9

Geocoder  geocoder  =  new  Geocoder(this,  Locale.getDefault());

List<Address>  direcciones  =  geocoder        .getFromLocation(latitud,  longitud,  maxResults);

List<Address>  coordenadas  =  geocoder        .getFromLocationName(direccion,  maxResults);

Page 10: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Mapas de Google• API no incluida en el SDK básico de Android• Necesitamos incluir las librerías de Google• Por ejemplo: Google APIs - API Level 8 (Android 2.2)• Debemos crear el emulador también con esta API de Google• Declarar la librería de Google en el manifest

10

<application  android:icon="@drawable/icon"                          android:label="@string/app_name">                  <uses-­‐library  android:name="com.google.android.maps"  />                  ...                  <activity  android:name=".MapasActivity"                            android:label="@string/app_name">                <intent-­‐filter></intent-­‐filter>        </activity>  </application>

Page 11: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Actividad del mapa

• La actividad del mapa debe heredar de MapActivity• En el layout incluimos una vista con el mapa• No se encuentra en la paleta de componente de Android

• Necesitamos una clave de acceso a la API

11

<?xml  version="1.0"  encoding="utf-­‐8"?><com.google.android.maps.MapView        xmlns:android="http://schemas.android.com/apk/res/android"        android:id="@+id/mvMapa"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:apiKey="vzqSGwNXea1F0KDyc1HvvV6c0JfRQW-­‐mYelyt6Q"        android:clickable="true"/>

Page 12: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Clave de acceso• Clave vinculada al certificado con el que firmamos la aplicación• La obtenemos a partir de la huella MD5 de dicho certificado

• En caso de utilizar el certificado de depuración por defecto

• Obtendremos una clave como

• Debemos registrar en la web de Google Maps para Android

12

keytool  -­‐list  -­‐alias  miclave  -­‐keystore  mialmacen.keystore

keytool  -­‐list  -­‐alias  androiddebugkey                  -­‐keystore  $HOME/.android/debug.keystore                  -­‐storepass  android  -­‐keypass  android

Huella  digital  de  certificado  (MD5):                        52:D6:BD:27:A8:B1:5F:34:5A:BC:81:1C:76:E2:86:9F

http://code.google.com/android/maps-­‐api-­‐signup.html

Page 13: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Solicitud de la clave• Introducimos huella MD5 de nuestro certificado en la web

• Obtenemos clave y ejemplo de uso

13

Page 14: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Configuración del mapa

• Podemos configurar la vista del mapa• Activar/desactivar controles de zoom• Vista satélite o mapa

14

public  class  MapasActivity  extends  MapActivity  {      @Override    public  void  onCreate(Bundle  savedInstanceState)  {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                        MapView  mapView  =  (MapView)  findViewById(R.id.mvMapa);        mapView.setBuiltInZoomControls(true);

       mapView.setSatellite(true);    }}

Page 15: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Controlador del mapa• Nos permite movernos en el mapa

• Cambiar nivel de zoom

• Mover a una posición• La posición de indica mediante un objeto GeoPoint• Las coordenadas se especifican como enteros (multiplicar por 106)

• Mover a una posición mediante una animación

15

MapController  mc  =  mapView.getController();

mc.setZoom(17);

GeoPoint  p  =  new  GeoPoint(LATITUD_1E6,  LONGITUD_1E6);mc.setCenter(p);

mc.animateTo(p);

Page 16: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Marcador de posición

• Podemos poner un marcador con nuestra posición• Los marcadores se añaden como overlays

16

MyLocationOverlay  myLocation  =  new  MyLocationOverlay(this,  mapView);mapView.getOverlays().add(myLocation);

Page 17: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Habilitar seguimiento• Podemos hacer que nuestra localización se actualice conforme

nos movemos

• Mover el mapa a nuestra posición cuando se obtenga

• Es importante detener las actualizaciones cuando se cierre la tarea o cuando pase a segundo plano

• Podemos volver a habilitarla en onResume

17

myLocation.enableMyLocation();

@Overrideprotected  void  onPause()  {        super.onPause();        location.disableMyLocation();}

myLocation.runOnFirstFix(new  Runnable()  {        public  void  run()  {                mc.animateTo(myLocation.getMyLocation());        }});

Page 18: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Puntos de interés• Podemos añadirlos como overlays en el mapa• ItemizedOverlay nos permite añadir un conjunto de puntos• Cada punto se especifica como un objeto OverlayItem• Para cada item especificamos un drawable como marcador• ItemizedOverlay es una clase abstracta

Debemos definir una subclase

18

Page 19: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

ItemizedOverlay

19

class  RestaurantesItemizedOverlay  extends  ItemizedOverlay<OverlayItem>  {          private  List<OverlayItem>  mRestaurantes  =                                                                                  new  ArrayList<OverlayItem>();          public  RestaurantesItemizedOverlay(Drawable  defaultMarker)  {                super(defaultMarker);                this.mRestaurantes  =  cargarItemsRestaurantes();                this.populate();        }          @Override        protected  OverlayItem  createItem(int  i)  {                return  mRestaurantes.get(i);        }          @Override        public  int  size()  {                return  mRestaurantes.size();        }  }

Indica el número de items a mostrar

Devuelve cada uno de los items

Puebla el mapa con los items

Page 20: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Marcador de los items• Se especifica como drawable en el constructor

• Debemos definir sus límites (bounds)• Indica la forma de centrar el drawable en el punto del mapa• Tenemos el método protegido boundCenter de ItemizedOverlay

• También tenemos boundCenterBottom para tipo “chincheta”

20

Drawable  marker  =  this.getResources().getDrawable(R.drawable.marker);ItemizedOverlay  itemizedOverlay  =          new  RestaurantesItemizedOverlay(marker);

public  RestaurantesItemizedOverlay(Drawable  defaultMarker)  {        super(boundCenter(defaultMarker));}

Page 21: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Configuración de los items• Los creamos como objetos de tipo OverlayItem• Proporcionamos coordenadas, nombre y descripción

• Podemos especificar un marcador propio• Es importante definir los límites del marcador

21

GeoPoint  point  =  new  GeoPoint((int)  (restaurante.getLatitud()  *  1E6),                                                              (int)  (restaurante.getLongitud()  *  1E6));OverlayItem  overlay  =  new  OverlayItem(point,  restaurante.getNombre(),                                                                              restaurante.getDescripcion());listaRestaurantes.addOverlay(overlay);

Drawable  marcador  =  this.getResources().getDrawable(R.drawable.marker2);marcador.setBounds(0,  0,  marcador.getIntrinsicWidth(),                                                    marcador.getIntrinsicHeight());overlay.setMarker(marcador);

Page 22: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Globos informativos• El nombre y descripción deberemos mostrarlo nosotros• Existen librerías que se encargan de hacer esto• MapViewBalloons

https://github.com/jgilfelt/android-mapviewballoons• Nos muestra la información en forma de “globos”

22

Page 23: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Uso de MapViewBalloons• Incluir en el proyecto• Clases BalloonItemizedOverlay y BallonOverlayView• Drawable para los marcadores marker.png• Drawables para los globos

balloon_overlay_close.pngballoon_overlay_focused.9.pngballoon_overlay_unfocused.9.pngballoon_overlay_bg_selector.xml

• Heredamos de BalloonItemizedOverlay en lugar de ItemizedOverlay

23

class  RestaurantesItemizedOverlay  extends  BalloonItemizedOverlay<OverlayItem>  {          public  RestaurantesItemizedOverlay(Drawable  defaultMarker,  MapView  mapView)  {                super(boundCenter(defaultMarker),  mapView);        }        ...}

Page 24: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Reconocimiento del habla• Transforma nuestra voz en texto

• Soporta diferentes idiomas• Propiedad EXTRA_LANGUAGE• Por ejemplo “es-­‐ES”

• Dos modelos de lenguaje:• Búsqueda web (LANGUAGE_MODEL_WEB_SEARCH)• Libre (LANGUAGE_MODEL_FREE_FORM)

• Indicar el modelo de lenguaje es obligatorio• Propiedad EXTRA_LANGUAGE_MODEL

24

Page 25: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

Lanzar reconocimiento del habla• Lanzamos la aplicación

• Obtenemos resultados

25

Intent  intent  =  new  Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

intent.putExtra(parametro,  valor);

startActivityForResult(intent,  codigo);

@Overrideprotected  void  onActivityResult(int  requestCode,  int  resultCode,  Intent  data)  {        if  (requestCode  ==  codigo  &&  resultCode  ==  RESULT_OK)  {                  ArrayList<String>  resultados  =                          data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);                                          //  Utilizar  los  resultados  obtenidos                ...        }        super.onActivityResult(requestCode,  resultCode,  data);}

Propiedades del reconocimiento

(modo, idioma, etc)

Page 26: Sesión 2: Geolocalización y mapas - ua · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2012-2013 Depto. Ciencia de la Computación e IA Geolocalización y mapas

¿Preguntas...?

26