LocationListener в workManager
Имею приложения для бега, пытаюсь отслеживать передвижение пользователя когда экран заблокирован, перепробовал уже много чего, и пока остановился на варианте с LocationListener в workmanager, но проблема в том, что он и в фоновом и на переднем плане ничего не получает в слушатель, может есть какой хороший туторила или совет что не так
мой WorkManager
@HiltWorker
class TrackLocationWorker @AssistedInject constructor(
@Assisted private val context: Context,
@Assisted workerParams: WorkerParameters,
private val repository: RunRepository
) : Worker (context, workerParams) {
private val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
private val listener = object : LocationListener {
@SuppressLint("MissingPermission")
override fun onProviderEnabled(provider: String) {
super.onProviderEnabled(provider)
Log.e(TAG,"onProviderEnabled")
locationManager.getLastKnownLocation(provider)?.also {
repository.emitLocationFlow(
listOf(it)
)
}
}
override fun onProviderDisabled(provider: String) {
super.onProviderDisabled(provider)
Log.e(TAG,"onProviderDisabled")
}
override fun onLocationChanged(it: Location) {
Log.e(TAG, "new point ")
repository.emitLocationFlow(mutableListOf(it))
}
override fun onLocationChanged(locations: MutableList<Location>) {
//super.onLocationChanged(locations)
Log.e(TAG, "new points ")
repository.emitLocationFlow(locations)
}
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) = Unit
}
@SuppressLint("MissingPermission")
override fun doWork(): Result {
return try {
Log.e(TAG,"onWork")
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
3000.toLong(),
5.toFloat(),
listener)
Result.success()
} catch (e: Exception) {
Log.e(TAG, "Failure in doing work $e")
Result.failure()
}
}
override fun onStopped() {
Log.e(TAG,"onStopped")
locationManager.removeUpdates(listener)
super.onStopped()
}
}
Проверку на все разрешения я делаю в активности
мой манифест
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
tools:ignore="CoarseFineLocation" />
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />