Esta biblioteca empaqueta las API de localización en las corrutinas de Kotlin y Flow
.
Cree una CoLocation
o CoGeocoding
preferiblemente usando un marco de inyección de dependencia. CoLocation
es muy similar a las clases proporcionadas por la API de ubicación. En lugar de LocationServices.getFusedLocationProviderClient (context) .lastLocation
puede utilizar coLocation.getLastLocation ()
. Asegúrese de tener permiso de ubicación de Marshmallow si es necesario para sus solicitudes de API.
Ejemplo:
val coLocation = CoLocation .from (contexto);
val coGeocoder = CoGeocoder .da (contexto);
val locationRequest = LocationRequest .create ()
.setPriority ( LocationRequest . PRIORITY_HIGH_ACCURACY )
.setInterval ( 5000 )
val locationUpdates : MutableLiveData < Ubicación > = MutableLiveData ()
val addressUpdates : LiveData < Dirección ? > = locationUpdates.switchMap {location - [19659009]>
liveData {emit (coGeocoder.getAddressFromLocation (ubicación))}
}
val trabajo = viewModelScope.launch {
prueba {
coLocation.getLocationUpdates (locationRequest) .collect ( mutableLocationUpdates :: postValue)
} catch ( y : CancellationException ) {
// Se cancelaron las actualizaciones de ubicación
}
}
// Las actualizaciones se cancelan automáticamente cuando se cancela viewModelScope.
// Si desea cancelar antes, guarde su trabajo y cancélelo.
job.cancel ()
Las siguientes API se incluyen en esta biblioteca:
FusedLocationProviderClient
viaCoLocation
SettingsClient
viaCoLocation
Geocoder
viaCoGeocoder
El control de la configuración de ubicación se simplifica con esta biblioteca al proporcionar un SettingsResult
a través de coLocation.checkLocationSettings (locationRequest)
:
val settingsResult] = coLocation.checkLocationSettings (locationRequest)
cuando (settingsResult) {
SettingsResult.Satisfied - > startLocationUpdates ()
es SettingsResult.Resolizable - > settingsResult.resolve (actividad, REQUEST_SHOW_SETTINGS )
otro - > { / * Ignore por ahora, no podemos resolverlo de todos modos * / }
}
anular fun onActivityResult ( requestCode : Int resultCode : Int datos : [19659005] ¿Intención ?) {
super .onActivityResult (requestCode, resultCode, datos )
if (requestCode == REQUEST_SHOW_SETTINGS && resultCode == Actividad . RESULT_OK)
// Resolución correcta, ahora se cumplen los ajustes de ubicación
startLocationUpdates ()
}
}
Una aplicación de muestra básica está disponible en el proyecto de muestra
.
La biblioteca está disponible en jCenter. Agregue lo siguiente a build.gradle
:
dependencias {
implementación & # 39; com.patloew.colocation: colocation: 1.0.0 & # 39;
implementación & # 39; com.google.android.gms: play-services-location: 17.0. 0 & # 39;
}
Si desea utilizar una versión más reciente de Google Play Services, declare la última versión en su build.gradle
. Esto luego anula la versión declarada en la biblioteca.
CoLocation solo funciona con Android Gradle Plugin 3.0.0 o superior, ya que utiliza funciones del lenguaje Java 8. No olvide configurar la compatibilidad del código fuente con Java 8:
android {
compileOptions {
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
}
kotlinOptions {
jvmTarget = " 1,8 "
}
}
Al realizar pruebas unitarias de las clases de tu aplicación, el comportamiento de CoLocation
y CoGeocoder
se puede burlar fácilmente. Consulte MainViewModelTest
en el proyecto muestra
para obtener una prueba de muestra.
Si le gusta la biblioteca y le gustaría apoyar al creador para el desarrollo / mantenimiento, puede hacer una donación de Bitcoin a bc1q5uejfyl2kskhhveg7lx4fcwgv8hz88r92yzjsu
. ¡Gracias!
Copyright 2020 Patrick Löwenstein
Con licencia de Apache License, Versión 2.0 (la "Licencia");
no puede utilizar este archivo excepto de acuerdo con la licencia.
Puede obtener una copia de la licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software
distribuido bajo la Licencia se distribuye "TAL CUAL",
SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita.
Consulte la licencia para el idioma específico que rige los permisos e
limitaciones de la licencia.
.