En esta página:
Demo Github
En la parte anterior llamada Como Solicitar Permisos del GPS Cuando una Aplicación se esta ejecutando (FusedLocationProviderClient) con Kotlin – Parte 2, creamos las funciones verificarPermisos() para revisar si el usuarios ha otorgado permisos para acceder a su ubicación. También creamos la función mostrarDialogoPermiso() que le recuerda al usuario encender su GPS si es que vuelve a la aplicación y tiene su GPS apagado. Asimismo agregamos otras funciones importantes. En esta tercera y última parte, terminaremos de crear nuestra proyecto, vamos con ello.
Partes
Antes de continuar te invito a leer los siguientes artículos:
- Las Novedades más Destacadas que trae Android Studio Chipmunk
- Como Configurar el Autoguardado en Android Studio
- Que es Android y tu Primera aplicación Hola Mundo
- Las Novedades más Destacadas que trae Android Studio Dolphin – Parte 1
- Como Leer un archivo JSON en Android (Android Studio 3.6.1 + Java) – Parte 1
- Que es Kotlin y otros detalles
- Tipos de Variables en Kotlin
- Las Novedades más Destacadas que trae Android Studio 4.0
- Creando un Bot (Android) para una tienda de Postres (Dialogflow V2 + Kotlin 1.3.72) – Parte 1
- Como Solicitar Permisos del GPS Cuando una Aplicación se esta ejecutando (FusedLocationProviderClient) con Java – Parte 1
- Puedes leer más artículos en la categoría Android
Asimismo, te invito a escuchar el Podcast: “Como Mantenerte Motivado Para Seguir Programando” y “¿ Se Debe Escuchar Música Mientras Se Programa ?” (Anchor Podcast):
Spotify: | Sound Cloud: | Apple Podcasts | Anchor Podcasts |
Bien ahora continuemos con el Post: Como Solicitar Permisos del GPS Cuando una Aplicación se esta ejecutando (FusedLocationProviderClient) con Kotlin – Parte 3 (Final).
Vamos a crear el método agregarOyenteUbicacion() en donde haremos uso de Fused Location Provider (FLP), este método o función agregarOyenteUbicacion(), lo llamamos en el método nativo onResume() en la Parte 2 de este tutorial:
1 2 3 4 5 6 |
@SuppressLint("MissingPermission") private fun agregarOyenteUbicacion(){ fusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback, null) } |
Ahora creamos un callback que mostrará un marcador en el mapa de Google con la ubicación actual del usuario, este usa la latitud y longitud obtenida. En la terminal imprimimos la latitud y longitud del usuario para verificar que se esta obteniendo las coordenadas del usuario:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Callback para mostrar un marcador en el Mapa de Google inner class MyLocationCallBack : LocationCallback(){ override fun onLocationResult(locationResult: LocationResult) { super.onLocationResult(locationResult) val location = locationResult.lastLocation location?.run { val latLng = LatLng(latitude,longitude) mMap.addMarker(MarkerOptions().position(latLng).title("Mi Ubicación")) mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17f)) Log.e("Ubicación","Latitud : $latitude, Longitud : $longitude") } } } |
Dentro del método nativo onPause() llamamos a la función removeLocationListener() que remueve el oyente que obtiene la ubicación del usuario, cuando el usuario abandone la actividad:
1 2 3 4 5 6 |
override fun onPause() { super.onPause() removeLocationListener() } |
Creamos la función removeLocationListener() la cual llamamos anteriormente dentro del método onPause():
1 2 3 4 5 |
private fun removeLocationListener(){ fusedLocationProviderClient.removeLocationUpdates(locationCallback) } |
Por último definimos la función onRequestPermissionsResult() que verifica si el usuario acepto o denego el permiso para acceder a su ubicación. Si el usuario denego el permiso le mostramos el mensaje Permiso denegado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) when(requestCode){ SOLICITAR_ACCESS_FINE_LOCATION-> { if((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)){ // Este método hace uso de Fused Location Provider (FLP) agregarOyenteUbicacion() } else{ // Si el usuario denego el permiso le mostramos el mensaje "Permiso denegado" val toast = Toast.makeText(applicationContext, "Permiso denegado", Toast.LENGTH_SHORT) toast.show() } return } } } |
Eso sería el código, ahora veamos algunas configuraciones adicionales para que todo quede bien.
Archivo AndroidManifest.xml
En este archivo básicamente debemos colocar nuestra API KEY de Google Maps para Android:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.fusedlocationproviderclientkotlin"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.FusedLocationProviderClientKotlin" tools:targetApi="31"> <!-- TODO: Before you run your application, you need a Google Maps API key. To get one, follow the directions here: https://developers.google.com/maps/documentation/android-sdk/get-api-key Once you have your API key (it starts with "AIza"), define a new property in your project's local.properties file (e.g. MAPS_API_KEY=Aiza...), and replace the "YOUR_API_KEY" string in this file with "${MAPS_API_KEY}". --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="ACA-TU-API-KEY" /> <activity android:name=".MapsActivity" android:exported="true" android:label="@string/title_activity_maps"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
Te recomiendo ver el video Como Obtener y Configurar una API KEY de Google Maps para Aplicación de Android Studio, si es que aún no tienes tu API KEY:
Pasemos al archivo de dependencias build.gradle (:app).
Archivo build.gradle (:app)
Android Studio me agrego la siguiente configuración y dependencias, cuando seleccione la plantilla de tipo Google Maps Activity, en la Parte 1 de este tutorial:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' } android { compileSdk 33 defaultConfig { applicationId "com.example.fusedlocationproviderclientkotlin" minSdk 21 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildFeatures { viewBinding true } } dependencies { implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.7.0' implementation 'com.google.android.gms:play-services-maps:18.1.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation 'com.google.android.gms:play-services-location:21.0.1' } |
Si quieres aprender como se hace con Java, te recomiendo visitar el tutorial: Como Solicitar Permisos del GPS Cuando una Aplicación se esta ejecutando (FusedLocationProviderClient) con Java – Parte 1.
Conclusión
En este tutorial que consta de 3 partes, hemos aprendido a Como Solicitar Permisos del GPS Cuando una Aplicación se esta ejecutando (FusedLocationProviderClient) con Kotlin. Existen varias maneras de hacer esto, en este tutorial te he compartido una de ellas.
Nota (s)
- El orden de algunas opciones puede cambiar en el futuro, esto no depende de mi, si no de los desarrolladores que dan soporte a Android Studio y suelen cambiar el orden de sus opciones en futuras versiones de Android Studio.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.