Приблизительное местоположение в Android Automotive OS

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

  • Для LocationManager API необходимо использовать 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. Поэтому для работы NETWORK_PROVIDER может потребоваться подключение к интернету.

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

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

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

Поставщик данных о местоположении в сети (NLP)

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

Fused Location Provider API

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

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