В целях соблюдения конфиденциальности пользователей разработчикам приложений рекомендуется запрашивать только грубые разрешения на определение местоположения. Приложения, которым требуется приблизительное приблизительное местоположение, обычно используют объединенное сетевое местоположение (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 Mobile Services), определяет местоположение на основе близлежащих вышек сотовой связи, точек доступа Wi-Fi и маяков Bluetooth (BT). В результате NETWORK_PROVIDER
может потребоваться подключение для передачи данных.
Для автомобильных приложений ограничения устройств различаются. Поскольку глобальная навигационная спутниковая система (GNSS) обычно включена, никаких штрафов из-за увеличения энергопотребления и использования батареи не возникает. В результате время безотказной работы IVI не ухудшается. Мы стремимся свести к минимуму обмен данными с нашими серверами.
Поэтому многие приложения используют FLP из Play API вместо напрямую LocationManager
, поскольку FLP автоматически делает разумные действия, используя поставщика местоположения, который лучше всего соответствует критериям/политикам запроса местоположения (а именно мощности и точности).
В отличие от мобильных устройств, транспортные средства редко перепрыгивают с одного места на другое. Положение автомобиля под капотом в большинстве случаев известно.
Поставщик сетевого определения местоположения (NLP)
В большинстве транспортных средств не реализованы необходимые API-интерфейсы телефонии для получения необходимой информации об идентификаторе ячейки (и уровне сигнала). В результате, поскольку мы минимизируем использование данных, дополнительная функциональная реализация NLP не предоставляется.
Поставщик объединенного местоположения
Мобильный 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" />
Такой подход обеспечивает максимальную совместимость с устройствами разных вертикалей и, следовательно, максимальную доступность приложений без различий в коде для получения позиций при необходимости.