С помощью Android-интентов можно запускать навигацию в Google Maps для Android Automotive.
Обзор
На этой странице описаны интенты, которые можно использовать с Google Maps для Android Automotive. Подробную документацию для разработчиков Android см. по следующим ссылкам:
Запросы намерений
Для запуска Google Maps для Android Automotive с помощью Intent необходимо сначала создать объект Intent , указав его действие, URI и пакет.
Действие. Все интенты Google Maps вызываются как действие View,
ACTION_VIEW.URI. Интенты Google Maps используют строки, закодированные в формате URI , которые указывают на выбранное действие, а также некоторые данные, с помощью которых это действие будет выполнено.
Пакет. Вызов функции
setPackage("com.google.android.apps.maps")гарантирует, что приложение Google Maps для Android обработает Intent. Если пакет не задан, система определяет, какие приложения могут обрабатывать Intent. Если доступно несколько приложений, вас могут спросить, какое приложение вы хотите использовать.
После создания Intent вы можете запросить у системы запуск соответствующего приложения несколькими способами. Распространенный метод — передать Intent в метод startActivity() . Система запустит необходимое приложение, в данном случае Google Maps, и запустит соответствующее Activity .
// Create a Uri from an intent string. Use the result to create an Intent.
Uri mapIntentUri =
Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
// Create an Intent from mapIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);
Если система не сможет идентифицировать приложение, способное реагировать на Intent, ваше приложение может аварийно завершить работу. Поэтому, прежде чем показывать пользователю Intent, сначала убедитесь, что принимающее приложение установлено.
Чтобы убедиться, что приложение доступно для приема интента, вызовите resolveActivity() для вашего объекта Intent . Если результат не равен null, значит, существует как минимум одно приложение, способное обработать интент, и можно безопасно вызвать startActivity() . Если результат равен null, не следует использовать интент и, если возможно, отключить функцию, которая его вызывает.
if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}
Например, чтобы запустить пошаговую навигацию к зоопарку Таронга в Сиднее, можно использовать следующий код:
Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}
Строки запроса, закодированные в формате URI
Все строки, передаваемые в интенты Google Maps, должны быть закодированы в формате URI. Например, строка "1st & Pike, Seattle" должна стать 1st%20%26%20Pike%2C%20Seattle . Пробелы в строке можно закодировать с помощью %20 или заменить знаком плюс (+).
Для кодирования строк можно использовать метод android.net.Uri encode() . Например:
Uri mapIntentUri = Uri.parse("google.navigation:q=" + Uri.encode("1st & Pike, Seattle"));
Отобразить карту
Используйте интент geo: для отображения карты в указанном месте и с заданным уровнем масштабирования. Например:
geo:latitude,longitude?z=zoom
Параметры
latitudeиlongitudeопределяют центральную точку карты.Параметр
zопционально задает начальный уровень масштабирования карты. Допустимые значения варьируются от 0 (весь мир) до 21 (отдельные здания). Верхний предел может изменяться в зависимости от доступных картографических данных в выбранном местоположении.
Пример
// Creates an intent that will load a map of San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Поиск местоположения
Используйте этот интент для отображения поисковых запросов в указанной области просмотра:
geo:latitude,longitude?q=query
geo:0,0?q=my+street+address
Параметры
В дополнение к параметрам, используемым для отображения карты, функция поиска поддерживает следующий параметр:
- Параметр
qопределяет места, которые следует выделить на карте. Параметрqобязателен для всех поисковых запросов. Он принимает местоположение либо в виде названия места, либо в виде адреса. Строка должна быть экранирована в формате URL, поэтому адрес, например, "City Hall, New York, NY", следует преобразовать вCity+Hall%2CNew+York%2CNY.
Результаты поиска с учетом координат.
При поиске очень точного местоположения широта и долгота не являются строго обязательными, если они указаны в параметре q . Однако, если вы не знаете точный адрес или запрос неоднозначен, вы можете попытаться исказить результаты поиска, указав координаты. Например, поиск адреса по запросу "Главная улица" может дать слишком много результатов:
// Searching for "101 Main Street" with no lat/long might return too many results
Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Добавление широты и долготы к URI намерения смещает результаты в сторону определенной области:
// Searches for "101 Main Street" near San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Поиск вдоль маршрута
Если во время навигации отправляется поисковый запрос geo:latitude,longitude?q=query , он запускает поиск вдоль маршрута, при этом широта и долгота игнорируются.
Поиск по предопределенным категориям
Для обеспечения интеграции с автомобилем, Google Maps в машине поддерживает намерение, отображающее следующие предопределенные категории:
| Категория | Кодирование категории намерений |
|---|---|
| Автозаправочная станция | gas_station |
| Ресторан | restaurant |
| Кафе | cafe |
| Стоянка | parking |
| станция зарядки электромобилей | electric_vehicle_charging_station |
Задание для указания категории имеет вид geo:lat,lng?c=category .
Используйте c=<pre-defined category> независимо от языковых настроек пользователя. Google Maps отобразит соответствующие результаты на языке, подходящем для этой категории. Например:
// Search for gas stations nearby
Uri gmmIntentUri = Uri.parse("geo:0,0?c=gas_station");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Другие категории поиска
Если вы укажете общий поисковый запрос (например, «рестораны» или «кофейни») в соответствии с языковыми настройками пользователя, Google Maps для Android Automotive будет искать предприятия, соответствующие этим критериям. Если в параметре geo: указаны конкретные широта и долгота, поиск будет сосредоточен вокруг этого местоположения. Если местоположение не указано (например, geo:0,0 ), Google Maps попытается найти ближайшие предприятия. Например:
// Search for restaurants nearby
Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Вы можете дополнительно скорректировать результаты поиска, указав параметр масштабирования вместе со строкой запроса. В следующем примере добавление масштабирования 10 позволяет искать рестораны на уровне города, а не поблизости:
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Запустить пошаговую навигацию
Для получения информации о запуске пошаговой навигации на других устройствах Android см. раздел «Запуск пошаговой навигации в Google Maps Intents для Android» .
Используйте этот интент для запуска навигации Google Maps с пошаговыми инструкциями по одному или нескольким указанным адресам или координатам. Инструкции всегда предоставляются от текущего местоположения пользователя.
google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
google.navigation:place=placename
Параметры
Для запуска навигации используйте place или q с waypoints (это необязательно). Чтобы дополнительно отметить путевую точку как зарядную станцию, см. раздел «Отправка плана поездки на электромобиле в Google Maps» .
Параметр
qзадает конечную точку для навигационного поиска. Это может быть широта и долгота или адрес в формате запроса. Если это строка запроса, возвращающая более одного результата, будет выбран первый результат.placeзадает конечную точку «дом» или «работа». Укажите home, чтобы перейти к адресу проживания пользователя, и work, чтобы перейти к адресу места работы пользователя.Параметр
avoidопределяет, каких функций маршрут должен избегать.avoidявляется необязательным и может принимать одно или несколько значений:-
tдля платных дорог -
hдля автомагистралей -
fдля паромов
-
waypointsуказывает одно или несколько промежуточных мест для прокладки маршрута к конечному пункту назначения, указанному параметромq. Вы можете указать несколько промежуточных точек, используя символ вертикальной черты (|) для разделения мест — например,Berlin,Germany|Paris,France. Вы можете использовать столько промежуточных точек, сколько необходимо. Промежуточные точки будут добавлены к маршруту в том же порядке, в котором они указаны в URL. Каждая промежуточная точка может быть либо адресом, либо координатами широты и долготы, разделенными запятыми; и вы можете иметь адреса и координаты широты и долготы в одном намерении. Строки должны быть экранированы в соответствии с URL-адресом , поэтому промежуточные точки типа "Berlin,Germany|Paris,France" должны быть преобразованы вBerlin%2CGermany%7CParis%2CFrance.
Примеры
Данное намерение запросит пошаговую навигацию к зоопарку Таронга в Сиднее, Австралия:
Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Если вы предпочитаете не платить за проезд по платным дорогам и не пользоваться паромом, вы можете запросить маршрут, который постарается избежать этих ситуаций:
Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Или, если вы предпочитаете проложить маршрут до своего дома, воспользуйтесь:
Uri mapIntentUri = Uri.parse("google.navigation:place=home");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Для запуска пошаговой навигации по следующим трем адресам в указанном порядке, введите Taronga Zoo в качестве конечного пункта назначения q , а Google Sydney и Sydney Opera House — в качестве путевых точек:
Google Сидней
Сиднейский оперный театр
Зоопарк Таронга, Сидней, Австралия
Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7CSydney+Opera+House");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Аналогично q , вы можете представить любую из путевых точек, разделёнными запятыми, вместо адреса. Например, чтобы запустить ту же навигацию, указав широту и долготу Сиднейского оперного театра вместо адреса:
Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7C-33.856159,151.215256");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Отправить план поездки на электромобиле в Google Maps
Используйте этот интент для навигации с несколькими пунктами назначения, чтобы указать некоторые пункты назначения в качестве остановок для зарядки электромобилей. Этот интент, расширяющий интент для навигации по нескольким точкам маршрута , помогает водителям поддерживать достаточный заряд батареи электромобиля для достижения пункта назначения, синхронизируя информацию об остановках зарядки между приложениями для планирования поездок на электромобилях и Google Maps.
Для остановок зарядки укажите цели поездки:
- Необходимо указать имя и координаты широты и долготы.
- Может дополнительно содержать выходную мощность, используемую для расчета времени зарядки.
Google использует название зарядной станции и координаты широты и долготы, чтобы найти подходящее место для зарядки и отобразить подробные данные, такие как типы разъемов, общее количество, скорость и доступность в режиме реального времени, поддерживаемые способы оплаты и точки интереса (POI). Например, маршрут движения по открытым парковкам в заключительной части навигации, часы работы, рейтинги. Чтобы зарядные станции хорошо соответствовали данным Google, используйте конкретный <brand name> — например, ChargePoint .
Параметры
Следующие параметры позволяют указать подробные характеристики конечного пункта назначения и любых промежуточных точек, включая те, которые обозначены как станции зарядки электромобилей.
Конечный пункт назначения
Чтобы указать зарядную станцию в качестве конечного пункта назначения, используйте:
-
q: Должно содержать широту и долготу зарядной станции. -
q_type:1указывает, что конечным пунктом назначения является зарядная станция. -
q_name: Название конечного пункта назначения. Обязательно, еслиq_typeравно1. -
q_power_output_kw: Число типа double для выходной мощности зарядной станции в киловаттах. Необязательный параметр.
Путевые точки
Для путевых точек все параметры представляют собой параллельные массивы значений, разделенных символом вертикальной черты ( | ), расположенные в том же порядке, что и путевые точки, за исключением конечного пункта назначения. Несоответствие количества элементов в параллельных массивах рассматривается как некорректный запрос.
Для добавления одной или нескольких точек маршрута «Зарядная станция» используйте следующие параметры, все из которых являются необязательными. Если один из пунктов назначения отмечен как зарядная станция, то название точки маршрута становится обязательным для этого пункта назначения.
waypoints: Список путевых точек, как описано в пошаговой навигационной инструкции. Для путевых точек зарядных станций необходимо указать широту и долготу.waypoint_types: Типы для каждой путевой точки, заданные числом.0— любая остановка (значение по умолчанию),1— зарядная станция.waypoint_names: Названия путевых точек. Это поле обязательно для зарядных станций.waypoint_power_outputs_kw: Числовое значение типа double для мощности зарядной станции в киловаттах. Для зарядных станций можно дополнительно указать значение выходной мощности точки маршрута, которое используется в качестве резервного, если соответствующая станция не найдена. Пустой слот означает, что значение не указано.
Поведение пользователей в контексте пользовательского опыта (UX)
При планировании поездки с несколькими пунктами назначения отображается экран обзора маршрута, но навигация автоматически не запускается.
При корректном отображении запроса Google Maps покажет экран обзора маршрута поездки. На этом экране будут отображены все путевые точки и конечный пункт назначения, а также рекомендации по оплате, если таковые имеются.
Для любых путевых точек или конечных пунктов назначения, отмеченных как зарядные станции, Google Maps будет искать соответствующее место в базе данных Google. Для обеспечения максимально точного отображения информации о зарядных станциях:
Если совпадение найдено, Google Maps использует данные Google для отображения зарядной станции в пользовательском интерфейсе и предоставления рекомендаций по зарядке на этой зарядной станции.
Если совпадение не найдено, данные, указанные в намерении для зарядной станции (широта и долгота, название и выходная мощность), используются для отображения этой зарядной станции в пользовательском интерфейсе и предоставления рекомендаций по зарядке на этой зарядной станции.
Примеры
Приведенные ниже примеры иллюстрируют, как создавать намерения для различных сценариев планирования поездок на электромобиле, включая навигацию через несколько зарядных станций и обработку неизвестных значений выходной мощности.
Проложите маршрут до конечного пункта назначения, используя несколько зарядных станций.
Данный маршрут пролегает до конечного пункта назначения, Порт-Маккуори, штат Новый Южный Уэльс, через две зарядные станции: ChargePoint и Evie.
Пункты назначения в порядке следования:
Зарядная станция ChargePoint (координаты: -32.9599188, 151.6240806, выходная мощность: 6,6 кВт)
Зарядная станция Evie (координаты: -31.9432539, 152.4699808, мощность: 350 кВт)
Порт-Маккуори, Новый Южный Уэльс
Uri mapIntentUri =
Uri.parse(
"google.navigation:q=Port+Macquarie+NSW"
+ "&waypoints=-32.9599188%2C151.6240806%7C-31.9432539%2C152.4699808"
+ "&waypoint_types=1%7C1"
+ "&waypoint_names=ChargePoint+Charging+Station%7CEvie+Charging+Station"
+ "&waypoint_power_outputs_kw=6.6%7C350");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Неизвестная выходная мощность
Если значение выходной мощности неизвестно, оставьте соответствующий слот параметра waypoint_power_outputs_kw пустым. Или, если все слоты пусты, указывать параметр waypoint_power_outputs_kw не требуется.
Пункты назначения в порядке следования:
Зарядная станция ChargePoint (местоположение: -32.9599188,151.6240806, выходная мощность: неизвестна)
Порт-Маккуори, Новый Южный Уэльс
Uri mapIntentUri =
Uri.parse(
"google.navigation:q=Port+Macquarie+NSW"
+ "&waypoints=-32.9599188%2C151.6240806"
+ "&waypoint_types=1"
+ "&waypoint_names=ChargePoint+Charging+Station");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Отметьте конечный пункт назначения как зарядную станцию.
Чтобы обозначить конечный пункт назначения как зарядную станцию, укажите параметры q_type , q_name и q_power_output_kw .
Пункты назначения в порядке следования:
Зоопарк Таронга, Сидней, Австралия
Зарядная станция ChargePoint (местоположение: -32.9599188,151.6240806, выходная мощность: неизвестна)
Зарядная станция Evie (координаты: -31.9432539, 152.4699808, мощность: 350 кВт)
Uri mapIntentUri =
Uri.parse(
"google.navigation:q=-31.9432539,152.4699808&q_type=1&q_name=Evie+Charging+Station&q_power_output_kw=350"
+ "&waypoints=Taronga+Zoo%2C+Sydney+Australia%7C-32.9599188%2C151.6240806"
+ "&waypoint_types=0%7C1"
+ "&waypoint_names=%7CChargePoint+Charging+Station"
+ "&waypoint_power_outputs_kw=%7C");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Намерения действий
Доступны следующие интенты действий с интерфейсами:
| Действие | Описание |
|---|---|
geo.action:?act=mute | Отключает все голосовые подсказки навигации. |
geo.action:?act=unmute | Отключает голосовые подсказки навигации. |
geo.action:?act=show_traffic | Отображает транспортные развязки на карте. |
geo.action:?act=hide_traffic | Скрывает линии разметки на карте. |
geo.action:?act=show_satellite | Отображает спутниковые снимки на карте. |
geo.action:?act=hide_satellite | Скрывает спутниковые снимки на карте. |
geo.action:?act=show_alternates | Google Maps открывает экран с альтернативными маршрутами (работает только во время навигации). |
geo.action:?act=route_overview | Google Maps открывает экран обзора маршрута (работает только во время навигации). |
geo.action:?act=query_next_turn | Google Maps озвучивает следующий поворот (работает только во время навигации). |
geo.action:?act=distance_to_next_turn | Google Maps озвучивает расстояние до следующего поворота (работает только во время навигации). |
geo.action:?act=time_to_next_turn | Google Maps озвучивает время до следующего поворота (работает только во время навигации). |
geo.action:?act=distance_to_destination | Google Maps озвучивает расстояние до пункта назначения (работает только во время навигации). |
geo.action:?act=go_back | Google Maps возвращается к предыдущему экрану пользовательского интерфейса. |
geo.action:?act=my_location | Google Maps центрирует карту относительно местоположения пользователя. |
geo.action:?act=show_map | Google Maps закрывает все открытые карточки и возвращается к отображению карты. |
geo.action:?act=query_current_road | Google Maps отображает текущую дорогу. |
geo.action:?act=query_destination | Google Maps озвучивает пункт назначения. |
geo.action:?act=traffic_report | Google Maps озвучивает сводку о дорожной ситуации. |
geo.action:?act=clear_search_results | Google Maps закрывает экран результатов поиска (если он открыт). |
geo.action:?act=apply_electric_vehicle_connector_filter | Применяет фильтр по типу разъема к результатам поиска зарядных станций для электромобилей. |
geo.action:?act=remove_electric_vehicle_connector_filter | Удаляет фильтр по типу разъема из результатов поиска зарядных станций для электромобилей. |
geo.action:?act=apply_electric_vehicle_payment_filter | Применяет фильтр по способу оплаты к результатам поиска зарядных станций для электромобилей. |
geo.action:?act=remove_electric_vehicle_payment_filter | Удаляет фильтр оплаты из результатов поиска зарядных станций для электромобилей. |
geo.action:?act=apply_electric_vehicle_fast_charging_filter | Применяет фильтр быстрой зарядки к результатам поиска зарядных станций для электромобилей. |
geo.action:?act=remove_electric_vehicle_fast_charging_filter | Удаляет фильтр быстрой зарядки из результатов поиска зарядных станций для электромобилей. |
geo.action:?act=avoid_tolls | Если пользователь осуществляет навигацию, это указывает Google Maps избегать маршрутов с платными дорогами. Это может привести к изменению маршрута, если текущий маршрут включает платные участки. |
geo.action:?act=allow_tolls | Если пользователь осуществляет навигацию, это указывает Google Maps разрешить маршруты с платными дорогами. Это может привести к изменению маршрута, если разрешение платных дорог позволит найти более удобный вариант. |
geo.action:?act=avoid_ferries | Если пользователь осуществляет навигацию, это указывает Google Maps избегать маршрутов с паромами. Это может привести к изменению маршрута, если текущий активный маршрут включает паромы. |
geo.action:?act=allow_ferries | Если пользователь осуществляет навигацию, это указывает Google Maps разрешить маршруты с паромами. Это может привести к изменению маршрута, если разрешение на использование паромов позволит найти более удобный вариант. |
geo.action:?act=avoid_highways | Если пользователь осуществляет навигацию, это указывает Google Maps избегать маршрутов, проходящих по автомагистралям. Это может привести к изменению маршрута, если текущий активный маршрут включает автомагистрали. |
geo.action:?act=allow_highways | Если пользователь осуществляет навигацию, это указывает Google Maps разрешить маршруты, проходящие по автомагистралям. Это может привести к изменению маршрута, если разрешение движения по автомагистралям позволит найти более удобный вариант. |
geo.action:?act=eta | При навигации Google Maps озвучивает предполагаемое время прибытия в пункт назначения (например, 9:15 утра). |
geo.action:?act=time_to_destination | Если пользователь управляет маршрутом, Google Maps сообщает ожидаемое время в пути до пункта назначения (например, 15 минут). |
geo.action:?act=exit_navigation | Завершение навигации. |
geo.action:?act=select_search_result&id=0 | Если результаты поиска отображаются на экране (как показано на прилагаемом изображении), это действие запускает навигацию к n -му результату на основе предоставленного параметра ID. Обратите внимание, что индексация начинается с 0 (то есть, geo.action:?act=select_search_result&id=0 выберет первый результат в списке).
|
