GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1...

8
Proyectos de desarrollo para dispositivos móviles GPS y Mapas Android 1 Práctica (primera parte) 2 Vamos a crear un proyecto para leer datos del gps del teléfono. El sensor nos entrega latitud, longitud y otros datos. Usaremos el API de Google para convertir los valores de latitud y longitud en una dirección en texto del lugar donde se encuentre el teléfono. También, podemos descargar una imagen con el mapa. Mostraremos un mapa interactivo con algunos elementos como marcadores, rutas, etc.

Transcript of GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1...

Page 1: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Proyectos de desarrollo para dispositivos móviles

GPS y Mapas Android

!1

Práctica (primera parte)

!2

❖ Vamos a crear un proyecto para leer datos del gps del teléfono.

❖ El sensor nos entrega latitud, longitud y otros datos.

❖ Usaremos el API de Google para convertir los valores de latitud y longitud en una dirección en texto del lugar donde se encuentre el teléfono. También, podemos descargar una imagen con el mapa.

❖ Mostraremos un mapa interactivo con algunos elementos como marcadores, rutas, etc.

Page 2: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Crea el proyecto❖ Crea un proyecto nuevo en Android Studio.

!3

Tu primer nombre

Permisos❖ Hay dos permisos:➡ ACCESS_COARSE_LOCATION. Redes, precisión de una cuadra. Más rápido. Menos batería.

➡ ACCESS_FINE_LOCATION. GPS, precisión de hasta 5 metros. Más lento. Más batería.

❖ Agrega el permiso adecuado en el Manifiesto de la aplicación. Para la práctica, agrega el primero.

❖ Agrega un requerimiento de hardware. Obligatorio para el API 21 o mayor.

!4

Page 3: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Crear el administrador❖ Agrega la variable de instancia gps de tipo LocationManager.

❖ Crea el método configurarGPS() y llámalo desde onCreate.

private void configurarGPS() { // Crea el administrador del gps gps = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Pregunta si está prendido el GPS en el sistema if (!gps.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { // Abrir Settings para prender el GPS, no se puede hacer con código prenderGPS(); } }

!5

Prender GPSprivate void prenderGPS() { // El usuario lo debe encender, no se puede con programación final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("El GPS está apagado, ¿Quieres prenderlo?") .setCancelable(false) .setPositiveButton("Si", new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int id) { startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); // Abre settings } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int id) { dialog.cancel(); } }); final AlertDialog alert = builder.create(); alert.show(); }

!6

Page 4: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Iniciar las actualizaciones@Override protected void onStart() { super.onStart(); // Prueba si tiene permiso para acceder al gps if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // No lo tiene, solicitar el permiso ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISO_GPS); // Contestará con onRequestPermissionsResult... } else { // Ya tiene permiso, iniciar actualizaciones gps.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this); } }

❖ La actividad implementa LocationListener y sobrescribe los métodos correspondientes.

Constante con valor

200La actividad debe implementarLocationListener

!7

Iniciar las actualizaciones❖ Al contestar el usuario, se ejecuta el siguiente método.@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == PERMISO_GPS && grantResults.length>0) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Contestó que SI, otorga el permiso. Iniciar actualizaciones. gps.requestLocationUpdates(LocationManager.ACCESS_COARSE_LOCATION, 1000, 0, this); } else { Log.i("onRequestPerm...","Contestó NO, indicarle cómo dar permiso..."); } } }

❖ Agrega la directiva @SuppressLint("MissingPermission") al método, para evitar el warning por el permiso.

!8

Page 5: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Mostrar la ubicación❖ Construye la siguiente GUI para mostrar la ubicación.

!9

Actualizando datos❖ Cada vez que se detecta una nueva ubicación se ejecuta el

método onLocationChanged.@Override public void onLocationChanged(Location location) {

etLatitud.setText(location.getLatitude() + ""); etLongitud.setText(location.getLongitude() + ""); posicion = location; }

❖ Declara los EditText como variables de instancia y asígnalos en el método onCreate.

❖ La variable de instancia posicion es una variable de instancia de tipo Location. Ésta guarda la última posición conocida.

!10

Page 6: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Corre tu app❖ Ejecuta tu app y verifica el funcionamiento.

➡ Si el teléfono/simulador tiene un API menor a 23, entra directamente a las actualizaciones. El permiso lo toma del manifiesto.

➡ Si el API es 23 o mayor, pregunta al usuario por el permiso.

➡ En el simulador, las coordenadas las puedes definir con los controles.

!11

Usando GPS

La práctica anterior utiliza las redes para ubicar al dispositivo, si necesitas mayor precisión, debes usar el sensor de GPS.

❖ Agrega los permisos en el Manifiesto.

❖ Cambia LocationManager.NETWORK_PROVIDER por LocationManager.GPS_PROVIDER

❖ Cambia Manifest.permission.ACCESS_COARSE_LOCATION por Manifest.permission.ACCESS_FINE_LOCATION

❖ Puedes tener los dos esquemas al mismo tiempo en tu app.

!12

Page 7: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Obtener la dirección en texto❖ Para obtener la dirección usamos el API de Google.➡ https://developers.google.com/maps/documentation/geocoding/intro?hl=es-419

➡ https://developers.google.com/maps/documentation/geocoding/intro?hl=es-419#ReverseGeocoding

❖ Hay un servicio que recibe latitud y longitud. Regresa un JSON con la dirección.

❖ https://maps.googleapis.com/maps/api/geocode/json?latlng=19.5972783,-99.226764&key=YOUR_API_KEY

!13

Segunda opción para obtener la dirección en texto

❖ El API de Google solo da una descarga/día gratuita. Para esta práctica, usa un servicio alterno:

❖ https://geocode.xyz/19.5972783,-99.226764?geoit=json

❖ https://developer.mapquest.com/documentation/geocoding-api/reverse/get/

❖ https://opencagedata.com/

❖ https://api.opencagedata.com/geocode/v1/json?q=19.5974136,-99.2259578&key=API_KEY

!14

Page 8: GPS y Mapas AndroidProyectos de desarrollo para dispositivos móviles GPS y Mapas Android!1 Práctica (primera parte)!2 Vamos a crear un proyecto para leer datos del gps del teléfono.

Mostrar el mapa❖ Descargar los datos de la página:

- https://opencagedata.com/

❖ Lanza un Intent con el url del mapa:// Lanzar intent con URL Intent intMapa = new Intent(Intent.ACTION_VIEW, Uri.parse(urlMapa)); startActivity(intMapa);

!15

Evaluación❖ Toma una captura de tu pantalla que servirá como

evidencia de la práctica.

!16