В документы для FusedLocationProviderClient.getCurrentLocation()
говорят следующее:
Этот метод может возвращать местоположения, которым несколько секунд, но никогда не возвращает более старые местоположения. Это подходит для приложений переднего плана, которым требуется одно свежее текущее местоположение.
Фоновые приложения, вызывающие этот метод, будут ограничены ограничениями фонового местоположения, поэтому фоновые приложения могут обнаружить, что метод чаще возвращает нулевые местоположения.
Каковы последствия будет дросселирования?
В моей ситуации у меня есть виджет, который обновляется не чаще, чем каждые 30 минут. С предоставленными соответствующими разрешениями на местоположение (передний план и фон) я уже могу получить доступ к последнему известному местоположению, используя FusedLocationProviderClient.getLastLocation()
, и это работает нормально.
Но я хотел бы изучить более активный подход, используя getCurrentLocation()
вместо getLastLocation()
. Для виджета без приложения на переднем плане, даже переходя от LocationRequest.PRIORITY_HIGH_ACCURACY
к getCurrentLocation()
, я никогда не вижу маленького значка местоположения (значка булавки карты), появляющегося в строке состояния, как я ожидал бы, если бы устройство активно запрашивало новое местоположение исправить. Да, разрешение ACCESS_FINE_LOCATION
запрашивается и предоставляется. Используя тот же вызов метода в приложении (на переднем плане), я действительно вижу значок местоположения.
Итак, есть ли реальная польза для виджета в использовании getCurrentLocation()
вместо getLastLocation()
в фоновом режиме, если он каким-то образом будет значительно затруднен? Иногда кажется, что для завершения требуется около 30 секунд (без видимого знака в строке состояния любого доступа к местоположению), а затем все равно возвращается с местоположением null
, так что же он на самом деле делает?
Я мог бы запустить службу переднего плана (с уведомлением), но это кажется излишним, если пользователь все равно будет видеть (через значок местоположения в строке состояния), к которому активно обращаются.
Так что же такое дросселирование? Просто установить ограничение на частоту (виджет обновляется не чаще, чем каждые 30 минут, так что это вряд ли часто)? Или установить ограничение на точность (например, без GPS)?