Periodi c Location Updates прекращается через некоторое время - PullRequest
0 голосов
/ 12 марта 2020

Я работаю над приложением, в котором мне нужно периодически 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);
...