Получить информацию о включенных/отключенных службах определения местоположения с помощью Fused Location Provider

Я работаю над приложением, которое использует Карты Google и отслеживает местоположение пользователя. Я хочу изменить видимость "Вы здесь!" маркер, когда пользователь закрывает службы определения местоположения вручную или службы переходят в состояние недоступности. Этот метод может возвращать информацию о том, включены ли службы определения местоположения или нет:

private boolean isLocationServicesEnabled() {
    LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER) || lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        return true;
    }
    return false;
}

Однако я не хочу за один раз определять статус служб определения местоположения. Всякий раз, когда пользователь открывает или закрывает службы определения местоположения, я должен обнаружить это и изменить видимость маркера. Короче говоря, этот небрежный псевдокод объясняет то, что я хочу услышать:

while application runs
   if location services turn off
      change marker visibility to false
   else
      change marker visibility to true 

Я не нашел способ выполнить эту задачу без android.location.LocationListener, хочу добиться этого, просто используя Fused Location Provider. Есть ли у вас какие-либо идеи? Вот основная структура, которую я использовал, если вы хотите увидеть:

http://www.androidhive.info/2015/02/android-location-api-using-google-play-services/ (проверьте заголовок «Полный код»)


person Dorukhan Arslan    schedule 14.03.2015    source источник


Ответы (2)


Чтобы сделать это правильно, нужно написать огромное количество кода. Вы должны использовать расположение SettingsApi. сорт.

Основная точка входа для взаимодействия с API-интерфейсами включения настроек местоположения.

Этот API позволяет приложению легко убедиться, что системные параметры устройства правильно настроены в соответствии с потребностями приложения в местоположении.

К счастью, есть полноценный образец, предоставленный Google на github

person e4c5    schedule 12.09.2015

Как насчет реализации прослушивателя GPS?

mLocationManager.addGpsStatusListener(new GpsStatus.Listener(){

    @Override
    public void onGpsStatusChanged(int event) {
        if(event==GpsStatus.GPS_EVENT_STARTED){
            Log.d(TAG,"Gps Started");
        }else if(event==GpsStatus.GPS_EVENT_STOPPED){
            Log.d(TAG,"Gps Stopped");
        }
    }
});

измените приведенный выше код, чтобы изменить видимость вашего маркера. Надеюсь, это сработает.

person so_jin_ee    schedule 16.03.2015
comment
Я рассматривал этот. Что делать, если провайдер GPS отключается, а сетевой провайдер продолжает работать? Я решил эту головоломку с помощью абсурдного метода здесь: ui">stackoverflow.com/questions/29053674/ - person Dorukhan Arslan; 16.03.2015