Как запустить метод onLocationChanged, когда приложение закрыто (с помощью метода onStop) - PullRequest
3 голосов
/ 15 июня 2019

У меня есть этот метод, который управляет моим местоположением:

 @Override
    public void onLocationChanged(final Location location) {
        if(inRun){
            Clocation myLocation = new Clocation(location, this.useMetricUnits());
            this.updateSpeed(myLocation);
            this.updateDistance(myLocation);
            this.updateAverageSpeed(this.distance, this.chronometer);
            if (activity.getText().toString() != ActivityRecongnizedService.getActivity()) {
                activity.setText(ActivityRecongnizedService.getActivity());
                activityTimer.start();
            }


            switch (activity.getText().toString()) {
                case "STILL": still = true; break;
                case "IN VEHICLE": inVehicle = true; break;
                case "ON BICYCLE": onBicycle = true; break;
                case "ON FOOT": onFoot = true; break;
                case "RUNNING": running = true; break;
                case "WALKING": walking = true;break;
                case "TILTING": tilting = true; break;
            }

            setTimeActivity();

            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            String[] key;
            key = user.getEmail().split("@");
            reference.child("Position").child(key[0]).child("latlng").setValue(new LatLng(location.getLatitude(),location.getLongitude()));

        }
    }

Но я хочу, чтобы этот метод запускался, когда MainActivity не работает. Я читал об этом, и есть два способа сделать то же самое: с помощью сервиса или с помощью метода onStop.

Я предпочитаю второй способ, с методом onStop, но я не знаю, как вызвать onLocationChanged в методе onStop.

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

Надеюсь, это поможет вам.В Android есть менеджер местоположений, который обеспечивает доступ к системе определения местоположения сервиса.Вы можете запустить событие onLocationChanged, используя этот класс.

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

// Get the best provider  for the criteria
Criteria criteria = new Criteria();
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAccuracy(Criteria.ACCURACY_FINE);

String bestprovider = locationManager.getBestProvider(criteria,false);
locationManager.requestLocationUpdates(bestprovider,0, 0, this);

Если вы вставите часть этого кода в метод onStop, событие onLocationChanged будет запущено.

1 голос
/ 15 июня 2019

Переопределите свой метод onStop и получите последнее известное местоположение пользователя следующим образом.

fusedLocationClient.lastLocation
    .addOnSuccessListener { location : Location? ->
        // Got last known location. In some rare situations this can be null.
    }

см. Эту ссылку для получения более подробной информации https://developer.android.com/training/location/retrieve-current теперь, когда вы получили местоположение пользователя при обратном вызове onSuccessListener, вы можете обновить местоположение для своей базы данных / сервера Firebase

Примечание В зависимости от ваших требований вы можете запустить этот код в главном потоке или в другом потоке

...