Google Maps para intents do Android Automotive

Exoneração de responsabilidade

Este produto/recurso vai mudar e não está sujeito a nenhum contrato de nível de serviço (SLA) ou política de descontinuação. A implementação está sujeita a mudanças em versões futuras.

Com relação ao software de amostra, arquivos de dados e/ou código-fonte que acompanham esta documentação: este produto é fornecido "no estado em que se encontra" e sem qualquer tipo de garantia, e o Google renuncia expressamente a todas as garantias, sejam expressas, implícitas, estatutárias ou de outra forma, incluindo, sem limitação, garantias de comercialidade, adequação a uma finalidade específica e não violação de quaisquer direitos relacionados a este produto.


Com as intents do Android Automotive, você pode iniciar a navegação no Google Maps.

Para mais informações, consulte Intents do Google Maps para Android.

Para mais informações sobre como levar seu app para veículos com o Android Auto ou o Android Automotive OS, consulte Android para carros.

Visão geral

Esta página descreve as intents que você pode usar com o Google Maps para Android Automotive. Para conferir a documentação detalhada do desenvolvedor Android, acesse:

Solicitações de intent

Para iniciar o Google Maps para Android Automotive com uma intent, primeiro crie um objeto Intent, especificando a ação, o URI e o pacote.

  • Ação. Todas as intents do Google Maps são chamadas como uma ação de visualização, ACTION_VIEW.

  • URI. As intents do Google Maps usam strings codificadas na URI que especificam uma ação desejada, além de alguns dados para realizar a ação.

  • Package. Chamar setPackage("com.google.android.apps.maps") garante que o app Google Maps para Android processe a intent. Se o pacote não estiver definido, o sistema determinará quais apps podem processar a intent. Se vários apps estiverem disponíveis, você precisará escolher qual deles quer usar.

Depois de criar a intent, você pode solicitar que o sistema inicie o app relacionado de várias maneiras. Um método comum é transmitir a intent para o método [startActivity()]. O sistema vai iniciar o app necessário (neste caso, o Google Maps) e iniciar a Activity correspondente.

// 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);

Se o sistema não conseguir identificar um app que possa responder à intent, o app poderá falhar. Por esse motivo, verifique se um aplicativo receptor está instalado antes de apresentar uma dessas intents a um usuário.

Para verificar se um app está disponível para receber a intent, chame [resolveActivity()] no objeto [Intent]. Se o resultado não for nulo, há pelo menos um app que pode processar a intent e é seguro chamar [startActivity()]. Se o resultado for nulo, não use a intent e, se possível, desative o recurso que a invoca.

if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}

Por exemplo, para iniciar a navegação guiada no Taronga Zoo em Sydney, você pode usar o seguinte código:

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);
}

Strings de consulta codificadas em URI

É necessário codificar para URI todas as strings passadas para as intenções do Google Maps. Por exemplo, a string "1st & Pike, Seattle" precisa se tornar 1st%20%26%20Pike%2C%20Seattle. Os espaços na string podem ser codificados com %20 ou substituídos pelo sinal de adição (+).

Você pode usar o método android.net.Uri parse() para codificar suas strings. Exemplo:

Uri mapIntentUri = Uri.parse("google.navigation:q=" + Uri.encode("1st & Pike, Seattle"));

Iniciar a navegação guiada

Use essa intent para iniciar a navegação do Google Maps com rotas de navegação guiada para um ou vários endereços ou coordenadas especificados. As rotas são sempre fornecidas a partir da localização atual do usuário.

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
google.navigation:place=placename

Parâmetros

Para iniciar a navegação, use place ou q com waypoints, que é opcional. Para marcar um waypoint como uma estação de recarga, consulte Enviar um plano de viagem de veículo elétrico para o Google Maps.

  • q define o ponto final das pesquisas de navegação. Pode ser uma latitude/longitude ou um endereço formatado de consulta. Se for uma string de consulta que retorna mais de um resultado, o primeiro será selecionado.

  • place define o endpoint como casa ou trabalho. Especifique "casa" para navegar até a casa do usuário e "trabalho" para navegar até o local de trabalho do usuário.

  • avoid define os recursos que a rota precisa tentar evitar. avoid é opcional e pode ser definido como um ou mais de:

    • t para pedágios
    • h para rodovias
    • f para balsas
  • waypoints especifica um ou mais lugares intermediários para rotear rotas até o destino final especificado por q. Você pode especificar vários waypoints usando o caractere de barra vertical (|) para separar lugares. Por exemplo, Berlin,Germany|Paris,France. Você pode usar quantos waypoints forem necessários. Os waypoints são adicionados ao trajeto na mesma ordem em que estão listados no URL. Cada waypoint pode ser um endereço ou coordenadas de latitude/longitude separadas por vírgula. Além disso, você pode ter endereços e coordenadas de latitude/longitude na mesma intent. As strings precisam ter escape de URL. Dessa forma, waypoints como "Berlim,Alemanha|Paris,França" precisam ser convertidos em Berlin%2CGermany%7CParis%2CFrance.

Exemplos

Esta intent vai solicitar a navegação guiada até o Zoológico de Taronga, em Sydney, na Austrália:

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);

Se você preferir não pagar pedágios ou pegar uma balsa, solicite uma rota para evitar estas situações:

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);

Ou, se você preferir iniciar o trajeto até sua casa, use:

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);

Para iniciar a navegação guiada para os três endereços a seguir em ordem, passe o Zoológico Taronga como o destino final q e a Google Sydney e a Sydney Opera House como os waypoints:

  1. Google Sydney

  2. Sydney Opera House

  3. Zoológico de Taronga, Sydney, Austrália

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);

Assim como em q, é possível representar qualquer um dos waypoints por latitude e longitude separadas por vírgula, em vez de um endereço. Por exemplo, para iniciar a mesma navegação ao passar a longitude de latitude para a Ópera de Sydney, em vez do endereço:

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);

Enviar um plano de viagem de veículo elétrico ao Google Maps

Use essa intent de navegação de vários destinos para especificar alguns destinos como postos de recarga de veículos elétricos (VE). Essa intent, que estende a intent de vários waypoints, ajuda os motoristas a manter carga suficiente da bateria do veículo elétrico para chegar aos destinos, sincronizando informações de pontos de recarga entre os apps de planejamento de viagens de VE e o Google Maps.

Para postos de recarga, as intents de viagem:

  • Deve conter nome e lat-long
  • Opcionalmente, pode conter potência para ser usada no cálculo do tempo de carregamento

O Google usa o nome e a latitude da estação de recarga para encontrar um local correspondente para exibir dados avançados, como tipos de conector, totais, velocidades e disponibilidade em tempo real, formas de pagamento aceitas e pontos de interesse (PDIs) do host. Por exemplo, rotas de carro em estacionamentos ao ar livre para a parte final da navegação, horário de funcionamento e classificações. Para garantir que as estações de recarga correspondam bem aos dados do Google, use <brand name>. Por exemplo: ChargePoint.

Parâmetros

Destino final

Para definir uma estação de recarga como destino final, use:

  • q: precisa conter o valor de lat-long da estação de recarga.
  • q_type: o 1 especifica que o destino final é uma estação de recarga.
  • q_name: o nome do destino final. Obrigatório se q_type for 1.
  • q_power_output_kw: um número duplo para a saída de energia da estação de recarga em quilowatts. Opcional.

Pontos de referência

Para waypoints, todos os parâmetros são matrizes de valores paralelas e separadas por | na mesma ordem dos waypoints, sem incluir o destino final. Uma incompatibilidade no número de elementos em matrizes paralelas é tratada como uma intent malformada.

Para adicionar um ou mais waypoints das estações de recarga, use os parâmetros a seguir, que são opcionais. Se um dos destinos estiver marcado como uma estação de recarga, o nome do waypoint se tornará obrigatório.

  • waypoints: lista de waypoints, conforme descrito na intent de navegação guiada. Precisa ser um valor de lat-long para os waypoints da estação de recarga.

  • waypoint_types: tipos por waypoint especificado como um número. 0 é qualquer parada (valor padrão), e 1 é a estação de recarga.

  • waypoint_names: nomes de waypoints. Esse campo é obrigatório para estações de recarga.

  • waypoint_power_outputs_kw: números duplos de energia da estação de recarga em quilowatts. Para estações de recarga, você tem a opção de especificar um valor de saída de energia do waypoint, que será usado como substituto se a estação correspondente não for encontrada. Um slot vazio significa que nenhum valor foi fornecido.

Comportamento da experiência do usuário (UX)

Para intents de viagem com vários destinos, a tela de visão geral do trajeto é exibida, mas a navegação não começa automaticamente.

Para uma intent formatada corretamente, o Google Maps apresentará uma tela de visão geral do trajeto para a viagem. A tela de visão geral do trajeto vai mostrar todos os waypoints e o destino final da intent, com recomendações de carregamento, quando aplicáveis.

Para qualquer waypoint ou destino final marcado como uma estação de recarga, o Google Maps pesquisa um lugar correspondente no banco de dados do Google.

Quando uma correspondência é encontrada, o Google Maps usa dados do Google para exibir a estação de recarga na interface do usuário (interface) e fornecer uma recomendação de recarga para ela. Se a correspondência não for encontrada, os dados fornecidos na intent para uma estação de carregamento (lat-long, nome e saída de energia) serão usados para exibir essa estação na interface e fornecer uma recomendação de carregamento nessa estação.

Exemplos

Vá até o destino final usando várias estações de recarga

A intent a seguir navega até o destino final, Port Macquarie NSW, usando duas estações de recarga, ChargePoint e Evie.

Destinos em ordem:

  1. Estação de recarga do ChargePoint (local: -32.9599188,151.6240806, saída de potência: 6,6 kw)

  2. Estação de recarga Evie (local: -31.9432539,152.4699808, potência: 350 kw)

  3. Porto Macquarie NSW

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);

Saída de energia desconhecida

Se o valor de saída de energia for desconhecido, deixe o slot relevante de waypoint_power_outputs_kw vazio. Ou, se todos os slots estiverem vazios, não será necessário especificar o parâmetro waypoint_power_outputs_kw.

Destinos em ordem:

  1. Estação de recarga do ChargePoint (local: -32.9599188,151.6240806, potência: desconhecida)

  2. Porto Macquarie NSW

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);

Marcar o destino final como uma estação de recarga

Para marcar o destino final como uma estação de recarga, especifique os parâmetros q_type, q_name e q_power_output_kw.

Destinos em ordem:

  1. Zoológico de Taronga, Sydney, Austrália

  2. Estação de recarga do ChargePoint (local: -32.9599188,151.6240806, potência: desconhecida)

  3. Estação de recarga Evie (local: -31.9432539,152.4699808, potência: 350 kw)

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);