В целях соблюдения конфиденциальности пользователей разработчикам приложений рекомендуется запрашивать только разрешение на определение приблизительного местоположения. Приложения, которым требуется приблизительное местоположение, обычно используют функцию определения местоположения по сети (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" />
Такой подход помогает достичь большей совместимости с устройствами разных форм-факторов и, следовательно, максимальной доступности приложения без каких-либо различий в коде для получения позиций при необходимости.