Итак, я сделал менеджер по тревоге и позвонил ему из своей основной деятельности. Класс приемника вещания принимает вызов, и он работает даже в фоновом режиме. Так что мне нужно знать широту и долготу пользователя и загрузить их в базу данных через API. Вот как теперь выглядит код
class AlarmReceiver : BroadcastReceiver() {
lateinit var mFusedLocationClient: FusedLocationProviderClient
var latitude = ""
var longitude = ""
var token = ""
var id = 0;
override fun onReceive(context: Context, intent: Intent) {
if (intent != null) {
token = intent.getStringExtra("token")
id = intent.getIntExtra("id", 0)
var mLocationRequest = LocationRequest()
mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
mLocationRequest.interval = 3000
mLocationRequest.fastestInterval = 1000
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
mFusedLocationClient!!.requestLocationUpdates(
mLocationRequest, mLocationCallback,
Looper.myLooper()
)
}
}
private val mLocationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
var mLastLocation: Location = locationResult.lastLocation
latitude = mLastLocation.latitude.toString()
longitude = mLastLocation.longitude.toString()
}
}
}
Я получил местоположение из обратного вызова, но проблема сейчас в том, что я не могу использовать залп, потому что этот обратный вызов не имеет контекста. Я пытался сделать объект-компаньон для этого обратного вызова в mainacctivity, но приложение закроет sh, если я закрою его. Есть ли способ получить контекст в обратном вызове или получить значение где-нибудь еще, чтобы я мог использовать залп даже в фоновом режиме?