mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
remove play services
This commit is contained in:
parent
f282f3f71e
commit
188d1fddaa
8 changed files with 34 additions and 243 deletions
|
|
@ -3,14 +3,11 @@ package com.geeksville.mesh.repository.location
|
|||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.location.Location
|
||||
import android.os.Looper
|
||||
import android.location.LocationListener
|
||||
import android.location.LocationManager
|
||||
import com.geeksville.mesh.android.GeeksvilleApplication
|
||||
import com.geeksville.mesh.android.Logging
|
||||
import com.geeksville.mesh.android.hasBackgroundPermission
|
||||
import com.google.android.gms.location.LocationCallback
|
||||
import com.google.android.gms.location.LocationRequest
|
||||
import com.google.android.gms.location.LocationResult
|
||||
import com.google.android.gms.location.LocationServices
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
|
@ -35,47 +32,43 @@ class SharedLocationManager constructor(
|
|||
val receivingLocationUpdates: StateFlow<Boolean> get() = _receivingLocationUpdates
|
||||
|
||||
// TODO use positionBroadcastSecs / test locationRequest settings
|
||||
private val desiredInterval = 1 * 60 * 1000L
|
||||
// if unset, use positionBroadcastSecs default
|
||||
// positionBroadcastSecs.takeIf { it != 0L }?.times(1000L) ?: (15 * 60 * 1000L)
|
||||
|
||||
// Set up the Fused Location Provider and LocationRequest
|
||||
private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
|
||||
private val locationRequest = LocationRequest.create().apply {
|
||||
interval = desiredInterval
|
||||
fastestInterval = 30 * 1000L
|
||||
// smallestDisplacement = 50F // 50 meters
|
||||
priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
|
||||
}
|
||||
private val fastestInterval = 30 * 1000L
|
||||
private val smallestDisplacement = 50F // 50 meters
|
||||
|
||||
@SuppressLint("MissingPermission")
|
||||
private val _locationUpdates = callbackFlow {
|
||||
val callback = object : LocationCallback() {
|
||||
override fun onLocationResult(result: LocationResult) {
|
||||
// info("New location: ${result.lastLocation}")
|
||||
trySend(result.lastLocation)
|
||||
}
|
||||
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||
val callback = LocationListener { location ->
|
||||
// info("New location: ${result.lastLocation}")
|
||||
trySend(location)
|
||||
}
|
||||
|
||||
if (!context.hasBackgroundPermission()) close()
|
||||
|
||||
info("Starting location requests with interval=${desiredInterval}ms")
|
||||
|
||||
info("Starting location updates with minTime=${fastestInterval}ms and minDistance=${smallestDisplacement}m")
|
||||
_receivingLocationUpdates.value = true
|
||||
GeeksvilleApplication.analytics.track("location_start") // Figure out how many users needed to use the phone GPS
|
||||
|
||||
fusedLocationClient.requestLocationUpdates(
|
||||
locationRequest,
|
||||
callback,
|
||||
Looper.getMainLooper()
|
||||
).addOnFailureListener { ex ->
|
||||
errormsg("Failed to listen to GPS error: ${ex.message}")
|
||||
close(ex) // in case of exception, close the Flow
|
||||
try {
|
||||
locationManager.requestLocationUpdates(
|
||||
LocationManager.GPS_PROVIDER,
|
||||
fastestInterval,
|
||||
smallestDisplacement,
|
||||
callback,
|
||||
context.mainLooper
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
close(e) // in case of exception, close the Flow
|
||||
}
|
||||
|
||||
awaitClose {
|
||||
info("Stopping location requests")
|
||||
_receivingLocationUpdates.value = false
|
||||
GeeksvilleApplication.analytics.track("location_stop")
|
||||
fusedLocationClient.removeLocationUpdates(callback) // clean up when Flow collection ends
|
||||
locationManager.removeUpdates(callback) // clean up when Flow collection ends
|
||||
}
|
||||
}.shareIn(
|
||||
externalScope,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue