Карты Google для Android Automotive Intents

С помощью 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 — в качестве путевых точек:

  1. Google Сидней

  2. Сиднейский оперный театр

  3. Зоопарк Таронга, Сидней, Австралия

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.

Пункты назначения в порядке следования:

  1. Зарядная станция ChargePoint (координаты: -32.9599188, 151.6240806, выходная мощность: 6,6 кВт)

  2. Зарядная станция Evie (координаты: -31.9432539, 152.4699808, мощность: 350 кВт)

  3. Порт-Маккуори, Новый Южный Уэльс

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 не требуется.

Пункты назначения в порядке следования:

  1. Зарядная станция ChargePoint (местоположение: -32.9599188,151.6240806, выходная мощность: неизвестна)

  2. Порт-Маккуори, Новый Южный Уэльс

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 .

Пункты назначения в порядке следования:

  1. Зоопарк Таронга, Сидней, Австралия

  2. Зарядная станция ChargePoint (местоположение: -32.9599188,151.6240806, выходная мощность: неизвестна)

  3. Зарядная станция 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 выберет первый результат в списке).

Поиск Результаты отображаются на экране