Google Maps para intents do Android Automotive

Exoneração de responsabilidade

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

Em relação a exemplos de software, arquivos de dados e/ou código-fonte que acompanham esta documentação: este produto é fornecido "no estado em que se encontra" e sem garantia de qualquer tipo, e o Google renuncia expressamente a qualquer e todas as garantias, sejam expressas, implícitas, estatutárias ou de outro tipo, incluindo, sem limitação, garantias de comercialização, adequação a uma finalidade específica e não violação de 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 intenções que podem ser usadas com o Google Maps para Android Automotivo. Para conferir a documentação detalhada para desenvolvedores do Android, leia:

Solicitações de intent

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

  • Ação. Todas as intenções do Google Maps são chamadas como uma ação Visualizar, ACTION_VIEW.

  • URI. As intenções do Google Maps usam strings codificadas na URI que especificam uma ação desejada, juntamente com alguns dados para a execução da ação.

  • Pacote. Chamar setPackage("com.google.android.apps.maps") garante que o app do Google Maps para Android processe a intent. Se o pacote não estiver definido, o sistema vai determinar quais apps podem processar a intent. Se vários apps estiverem disponíveis, você poderá ser consultado sobre qual app gostaria de 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 atividade 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 pode falhar. Por isso, verifique antes se um aplicativo receptor está instalado antes de apresentar uma dessas intenções ao 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 será 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 curva a curva até o Taronga Zoo em Sydney, use 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 na 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 ser 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 as strings. Por 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 curva a curva 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 ponto de passagem 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 para as pesquisas de navegação. Pode ser uma latitude/longitude ou um endereço formatado para consulta. Se for uma string de consulta que retorna mais de um resultado, o primeiro resultado será selecionado.

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

  • avoid define os recursos que a rota deve tentar evitar. avoid é opcional e pode ser definido para um ou mais destes:

    • t para pedágios
    • h para rodovias
    • f para balsas
  • waypoints especifica um ou mais lugares intermediários para fornecer orientações de rota até o destino final especificado por q. É possível especificar vários pontos de referência usando o caractere de barra vertical (|) para separar lugares, por exemplo, Berlin,Germany|Paris,France. Você pode usar quantos pontos de passagem forem necessários. Os pontos de passagem serão adicionados à rota na mesma ordem em que estão listados no URL. Cada ponto de referência pode ser um endereço ou coordenadas de latitude/longitude separadas por vírgula. Além disso, é possível ter endereços e coordenadas de latitude/longitude na mesma intent. As strings precisam ter escape de URL, portanto, pontos de referência como "Berlin,Germany|Paris,France" precisam ser convertidos em Berlin%2CGermany%7CParis%2CFrance.

Exemplos

Essa intent vai solicitar a navegação curva a curva até o Taronga Zoo, em Sidnei, 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 balsas, é possível solicitar uma rota que tente 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 preferir navegar 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 passo a passo até os três endereços a seguir, transmita o Taronga Zoo como o destino final q e o Google Sydney e a Sydney Opera House como os pontos de passagem:

  1. Google Sydney

  2. Ópera de Sydney

  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 uma latitude e longitude separadas por vírgula em vez de um endereço. Por exemplo, para iniciar a mesma navegação transmitindo a latitude e longitude da Sydney Opera House 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 planejamento de viagem de veículo elétrico para o Google Maps

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

Para paradas de recarga, as intenções de viagem:

  • Precisa conter nome e lat-long
  • Pode conter a saída de energia, para ser usada no cálculo do tempo de carregamento

O Google usa o nome da estação de recarga e a latitude/longitude para encontrar um lugar de estação de recarga correspondente e mostrar dados avançados, como tipos de conector, totais, velocidades e disponibilidade em tempo real, métodos de pagamento aceitos e pontos de interesse (POI) do host. Por exemplo, rotas de carro em estacionamentos externos para a parte final da navegação, horários de funcionamento, classificações. Para garantir que as estações de recarga correspondam 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 latitude e longitude da estação de recarga.
  • q_type: 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 os pontos de passagem, todos os parâmetros são matrizes paralelos de valores separados por |-, na mesma ordem que os pontos de passagem, sem incluir o destino final. Uma incompatibilidade no número de elementos em matrizes paralelas é tratada como uma intent com formato inválido.

Para adicionar um ou mais pontos de passagem de estações de recarga, use os parâmetros a seguir, todos opcionais. Se um dos destinos for marcado como uma estação de recarga, o nome do ponto de passagem vai se tornar obrigatório para esse destino.

  • waypoints: lista de pontos de passagem, conforme descrito na intent de navegação guiada. Precisa ser um valor de latitude e longitude para os pontos de passagem da estação de recarga.

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

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

  • waypoint_power_outputs_kw: números duplos para a potência da estação de recarga em quilowatts. Para estações de carregamento, você pode especificar um valor de saída de energia de ponto de passagem, que é 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 da rota é exibida, mas a navegação não é iniciada automaticamente.

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

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

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

Exemplos

Navegar até um destino final usando várias estações de recarga

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

Destinos em ordem:

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

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

  3. Port 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);

Potência de saída 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 da ChargePoint (localização: -32.9599188,151.6240806, potência: desconhecida)

  2. Port 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 da ChargePoint (localização: -32.9599188,151.6240806, potência: desconhecida)

  3. Estação de recarga Evie (localização: -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);