Sesión 2: Geolocalización y mapas - ua · Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles Sensores © 2011-2012 Depto. Ciencia de la Computación
Post on 17-Apr-2020
6 Views
Preview:
Transcript
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2011-2012 Depto. Ciencia de la Computación e IA
Sensores de los dispositivos
Sesión 2: Geolocalización y mapas
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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. } };
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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”
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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>
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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"/>
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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); }}
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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()); }});
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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));}
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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); } ...}
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 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)
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Geolocalización y mapas
¿Preguntas...?
26
top related