Я работаю над приложением, в котором мне нужно периодически c обновлять местоположение с помощью Geofence. Я использую код ниже, но не работает. Перепробовал все возможные решения, которые дали Google и Stackoverflow. Кто-нибудь может мне помочь с тем, что я делаю неправильно?
GeofenceBroadcastReceiver. java: Приемник вещания получает широковещательную рассылку при достижении условия Geofence. GeofenceTransitionService. java: эта служба вызывается методом Broadcast Receiver onReceive (). Результат местоположения перестает давать местоположение после 2-3 результатов.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
locationRequest.setInterval(10000);
locationRequest.setFastestInterval(5000);
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
if (locationResult.getLastLocation().getLatitude() != 0 && locationResult.getLastLocation().getLongitude() != 0) {
Logger.log(TAG + "getCurrentLocationForOneMinDC_Lat_Long", locationResult.getLastLocation().getLatitude() + "");
Logger.log(TAG + "getCurrentLocationForOneMinDC_Lat_Long", locationResult.getLastLocation().getLongitude() + "");
}
}
}
};
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, CloseServiceBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 654166456, intent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (60 * 1000), pi);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (60 * 1000), pi);
} else {
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (60 * 1000), pi);
}
Logger.log(TAG + "getCurrentLocationForOneMin", "Setting Alarm");
CloseServiceBroadcastReceiver. java: остановка службы определения местоположения через одну минуту
Intent serviceIntent = new Intent(context, GeofenceTransitionService.class);
context.stopService(serviceIntent);