Грубое определение местоположения в ОС Android Automotive

В целях соблюдения конфиденциальности пользователей разработчикам приложений рекомендуется запрашивать только разрешение на определение приблизительного местоположения. Приложения, которым требуется приблизительное местоположение, обычно используют функцию определения местоположения по сети (FLP), поскольку она быстрая и потребляет меньше энергии. По сравнению с мобильными устройствами Android, определение местоположения по сети в автомобильных приложениях может быть более сложным. Вы можете использовать два API Android:

  • API LocationManager требует использования requestLocationUpdates для явного указания предпочтительного поставщика местоположения.

  • API сервисов Google Play предлагает более простой способ работы с местоположением в FusedLocationProviderClient .

Многие автомобильные приложения используют FLP из API сервисов Google Play вместо LocationManager . FLP выбирает оптимального поставщика местоположения на основе критериев запроса местоположения и политик (мощность и точность), необходимых для транспортного средства.

Вместо этого вы можете явно запросить и использовать NETWORK_PROVIDER , а также GPS_PROVIDER для точного определения местоположения, используя разрешения android.permission.ACCESS_FINE_LOCATION . В Android 12 (уровень API 31) и выше FUSED_PROVIDER , ранее доступный только через API сервисов Google Play, теперь доступен в качестве поставщика местоположения для LocationManager . Реализацию FLP можно увидеть в FusedLocationProvider.java .

Хотя можно использовать GPS_PROVIDER только с правами грубого разрешения (фреймворк искусственно снижает точность, чтобы соответствовать ожиданиям), это не имеет смысла для разработчиков, ориентированных на телефоны Android, поскольку общая доступность низкая и получение грубого местоположения часто занимает больше времени.

Сетевое расположение в автомобильной промышленности

NETWORK_PROVIDER используемый на телефонах Android (с мобильными сервисами Google), определяет местоположение на основе ближайших вышек сотовой связи, точек доступа Wi-Fi и маяков Bluetooth (BT). Поэтому для NETWORK_PROVIDER может потребоваться подключение к интернету.

Для автомобильных приложений ограничения устройств отличаются. Поскольку глобальная навигационная спутниковая система (ГНСС) обычно включена, никаких штрафов за повышенный расход энергии и заряда батареи не возникает. В результате время бесперебойной работы IVI не снижается. Мы стремимся минимизировать обмен данными с нашими серверами.

Поэтому многие приложения используют FLP из API Play вместо LocationManager напрямую, поскольку FLP автоматически поступает разумно , используя поставщика местоположения, который лучше всего удовлетворяет критериям/политикам запроса местоположения (а именно, мощности и точности).

В отличие от мобильных устройств, автомобили редко перемещаются с одного места на другое. Местоположение автомобиля в большинстве случаев известно по его состоянию под капотом.

Поставщик сетевого местоположения (NLP)

В большинстве автомобилей не реализованы необходимые API телефонии для получения информации о Cell ID (и уровне сигнала). В результате, а также в связи с минимизацией объёма данных, дополнительная функциональная реализация обработки естественного языка не предусмотрена.

Поставщик комбинированного местоположения

Мобильный FLP, помимо интеллектуального использования сетевых и GPS-провайдеров по мере необходимости, объединяет информацию с других датчиков для дальнейшего повышения качества определения местоположения. Текущая реализация FLP от Automotive, напротив, использует вышеупомянутые допущения и постоянно использует GPS_PROVIDER в качестве базового источника. Он искажает данные о местоположении, полученные от GNSS, добавляя ошибки, чтобы при необходимости получить более неточные данные. Например, когда клиенту предоставляются приблизительные данные о местоположении.

Таким образом, в очень редких случаях доступность первой позиции может занять больше времени, чем обычно. Например, при первом использовании транспортного средства, а точнее, его подсистемы определения местоположения, или после буксировки.

Разработка приложений для мобильных устройств и автомобилей

Для приложений, ориентированных на мобильные устройства и автомобили, которым не требуется более высокая точность, запрашивайте только android.permission.ACCESS_COARSE_LOCATION и при возможности используйте FLP. В качестве альтернативы, используйте GPS_PROVIDER напрямую с теми же разрешениями. Фреймворк снижает точность определения местоположения GNSS для соответствия требованиям API. Подробнее см. в разделе «Точность» в разделе «Запрос разрешений на определение местоположения» .

Кроме того, эти приложения должны явно указывать в манифесте функцию android.hardware.location.network как необязательную . Например:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

Такой подход помогает достичь большей совместимости с устройствами разных форм-факторов и, следовательно, максимальной доступности приложения без каких-либо различий в коде для получения позиций при необходимости.