Meu aplicativo precisa mostrar as direções do Google Maps de A a B, mas não quero colocar o Google Maps no meu aplicativo. Em vez disso, quero iniciá-lo usando um Intent. Isso é possível? Se sim, como?
java
android
google-maps
android-intent
Lars D
fonte
fonte
Respostas:
Você poderia usar algo como isto:
Para iniciar a navegação a partir do local atual, remova o
saddr
parâmetro e o valor.Você pode usar um endereço real, em vez de latitude e longitude. No entanto, isso dará ao usuário uma caixa de diálogo para escolher entre abri-la via navegador ou Google Maps.
Isso acionará o Google Maps diretamente no modo de navegação:
ATUALIZAR
Em maio de 2017, o Google lançou a nova API para URLs universais do Google Maps em várias plataformas:
https://developers.google.com/maps/documentation/urls/guide
Você também pode usar o Intents com a nova API.
fonte
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Isso é um pouco estranho, porque você solicitou "instruções", mas também pode usar o esquema de URI geográfico descrito na documentação do Android:
http://developer.android.com/guide/appendix/g-app-intents.html
O problema ao usar "localização geográfica: latitude, longitude" é que o Google Maps é centralizado apenas no seu ponto, sem nenhum alfinete ou etiqueta.
Isso é bastante confuso, especialmente se você precisar apontar para um local preciso ou pedir orientações.
Se você usar o parâmetro de consulta "geo: lat, lon? Q = name" para rotular seu ponto geográfico, ele utilizará a consulta para pesquisar e descartar os parâmetros lat / lon.
Encontrei uma maneira de centralizar o mapa com lat / lon e exibir um alfinete com um rótulo personalizado, muito agradável de exibir e útil ao pedir instruções ou qualquer outra ação:
NOTA (por @TheNail): Não está funcionando no Maps v.7 (versão mais recente no momento da redação). Irá ignorar as coordenadas e buscará um objeto com o nome dado entre parênteses. Consulte também Intent for Google Maps 7.0.0 com localização
fonte
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?Embora as respostas atuais sejam ótimas, nenhuma delas fez exatamente o que eu estava procurando, eu queria abrir apenas o aplicativo de mapas, adicionar um nome para cada local de origem e destino, usar o esquema de URI geográfico não funcionaria para mim e o link da web de mapas não tinha rótulos, então eu vim com essa solução, que é essencialmente uma amálgama das outras soluções e comentários feitos aqui, espero que seja útil para outras pessoas que visualizam essa pergunta.
Para usar sua localização atual como ponto de partida (infelizmente não encontrei uma maneira de rotular a localização atual), use o seguinte
Para garantir a integridade, se o usuário não tiver o aplicativo de mapas instalado, será uma boa ideia capturar a ActivityNotFoundException. Podemos iniciar a atividade novamente sem a restrição do aplicativo de mapas, podemos ter certeza de que nunca obteremos para o Toast no final, já que um navegador da Internet é um aplicativo válido para iniciar esse esquema de URL também.
PS Quaisquer latitudes ou longitudes usadas no meu exemplo não são representativas da minha localização, qualquer semelhança com uma localização verdadeira é pura coincidência, ou seja, eu não sou da África: P
EDITAR:
Para obter instruções, agora uma intenção de navegação é suportada com google.navigation
fonte
Usando os URLs mais recentes do Google Maps para várias plataformas : Mesmo se o aplicativo do Google Maps estiver ausente, ele será aberto no navegador
Exemplo https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
fonte
Abra o Google Maps usando Intent com diferentes modos:
Podemos abrir o aplicativo Google Maps usando a intenção:
Aqui, "mode = b" é para bicicleta.
Podemos definir o modo de dirigir, caminhar e andar de bicicleta usando:
Você pode encontrar mais informações sobre a intenção no Google Maps aqui .
Nota: Se não houver rota para a bicicleta / carro / caminhada, será exibido "Não é possível encontrar o caminho até lá"
Você pode conferir minha resposta original aqui .
fonte
Bem, você pode tentar abrir o aplicativo interno Android Maps usando o
Intent.setClassName
métodofonte
Para vários pontos de passagem, também pode ser utilizado o seguinte.
O primeiro conjunto de coordenadas é a sua localização inicial. Todos os próximos são pontos de passagem, a rota plotada passa.
Continue adicionando pontos de passagem, concordando "/ latitude, longitude" no final. Aparentemente, há um limite de 23 pontos de acordo com o Google Docs . Não tenho certeza se isso se aplica ao Android também.
fonte
Se você estiver interessado em mostrar a latitude e longitude da direção atual, poderá usar o seguinte:
A consulta a seguir ajudará você a fazer isso. Você pode passar a latitude e longitude de destino aqui:
Use acima como:
Ou, se você deseja mostrar via local, use:
Mais informações aqui: Google Maps Intents para Android
fonte
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google
DirectionsView
com o local de origem como local atual e o local de destino como uma stringNo acima,
destinationCityName
uma string variável modificou-a conforme necessário.fonte
tente isso
fonte
Isto é o que funcionou para mim:
fonte
se você conhece o ponto A, o ponto B (e quaisquer recursos ou faixas intermediárias), você pode usar um arquivo KML junto com sua intenção.
para obter mais informações, consulte esta resposta do SO
NOTA: este exemplo usa um arquivo de amostra que (a partir de mar13) ainda está online. se ficar offline, encontre um arquivo kml online e altere seu URL
fonte
Primeiro, você precisa agora que pode usar a intenção implícita. A documentação do Android nos fornece intenções comuns muito detalhadas para implementar a intenção do mapa. É necessário criar uma nova intenção com dois parâmetros.
Para a ação que podemos usar
Intent.ACTION_VIEW
e para o Uri, devemos construí-lo, abaixo anexei um código de exemplo para criar, construir, iniciar a atividade.fonte
<scheme>://<authority><absolute path>?<query>#<fragment>
não opacos<scheme>:<opaque part>#<fragment>
. O código acima gera o seguinte URI: ogeo:/0%2C0?Eiffel%20Tower
que causa a falha do aplicativo Google Maps. Até a documentação oficial usa URIs brutos / opacos por esse motivo. O código correto seria:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Uma boa solução kotlin, usando a mais recente resposta multiplataforma mencionada por lakshman sai ...
Porém, sem Uri.toString e Uri.parse desnecessários, essa resposta é limpa e mínima:
fonte
Você pode iniciar as direções do Google Maps por uma intenção no Android dessa maneira
fonte