2013-05-23 3 views
6

Vorrei sapere, se è possibile mettere diversi "punti di controllo" all'interno "Google Navigation" (navigazione di Google Maps) Con una query che segue il prossimo sintassi: "google.navigation:q=44.871709,-0.505704...."intenti a Google di navigazione per itinerario con diverse destinazioni intermedie

Se possibile, qual è la sintassi per due punti separati?

costo di un punto funziona, ad esempio: "google.navigation:q=44.871709,-0.505704"

ma vorrei mettere un paio di posti di blocco, ad esempio:

LatLng point1 = new LatLng(44.871709,-0.505704); 
LatLng point2 = new LatLng(43.572665,3.871447);      
Intent(android.content.Intent.ACTION_VIEW,Uri.parse("google.navigation:q="+ 
point1.latitude+","+point1.longitude+";"+ point2.latitude+","+point2.longitude)); 

ho letto gli altri problemi, dicono di usare questa sintassi:

"http://maps.google.com/maps?saddr="+"44.871709,-0.505704"+"&daddr="+"43.572665,3.871447" 

Con la soluzione di cui sopra, "Navigazione Google" non viene avviato automaticamente, dobbiamo scegliere un'applicazione "Google Maps" e successivamente, per fare clic su Itinerario (nella parte superiore del ghiaione n) per avviare "Google Navigation". Vorrei evitarlo se possibile.

risposta

10

Ecco un modo per sopprimere la finestra di dialogo e andare direttamente alle mappe.

String uri = "http://maps.google.com/maps?saddr="+"44.871709,-0.505704"+"&daddr="+"43.572665,3.871447"; 
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); 
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); 
startActivity(intent); 

fatemi sapere se avete ancora problemi.

UPDATE

A partire da maggio 2017, v'è un approccio migliore, l'API di Google Maps URL

https://developers.google.com/maps/documentation/urls/guide

Utilizzando questa API è possibile costruire un URL di origine, destinazione e waypoint e passarlo al l'intento

String uri = "https://www.google.com/maps/dir/?api=1&origin=Madrid,Spain&destination=Barcelona,Spain&waypoints=Zaragoza,Spain%7CHuesca,Spain&travelmode=driving&dir_action=navigate"; 
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); 
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); 
startActivity(intent); 
+0

Penso che abbandonerò la mia idea e terrò la tua soluzione grazie ;-) – bzhWarrior

+0

felice di essere stato in grado di aiutarti. – kushyar

+0

C'è un modo per aggiungere funzionalità come "Evita autostrade" in questo URL? – CopsOnRoad

0

Perché point1.longitude è doppio, è necessario utilizzare questo

String.valueOf(point1.latitude); 

Intent(android.content.Intent.ACTION_VIEW,Uri.parse("google.navigation:q="+String.valueOf(point1.latitude)+","+String.valueOf(point1.longitude)+";"+String.valueOf(point2.latitude)+","+String.valueOf(point2.longitude))); 

oppure è possibile utilizzare questo, ma è lo stesso.

point1.toString().replace("lat/lng: (", "").replace(")", "") 

point1.toString() il risultato è "lng lat /: (44,871,709 mila, -,505704)", rimuovere il "lng lat /: (" e ")". quindi puoi ottenere il risultato che desideri.

Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+point1.toString().replace("lat/lng: (", "").replace(")", "")+"&daddr="+point2.toString().replace("lat/lng: (", "").replace(")", ""))); 

Oppure si può provare questo

Uri uri = Uri.parse("http://maps.google.com/mapssaddr="+point1.toString().replace("lat/lng: (", "").replace(")", "")+"&daddr="+point2.toString().replace("lat/lng: (", "").replace(")", "")); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(intent); 

Spero che questo ti può aiutare.

+0

provo questo, ma GoogleNav. ancora non capisco questo itinerario. Grazie comunque per il tuo aiuto ;-) – bzhWarrior

-1

Devi passare solo loc destinazione zione. L'app di Google Maps prenderà automaticamente la tua posizione attuale per la navigazione.

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + String.valueOf(destination latitude) 
         + "," + String.valueOf(destination longitude))); 

startActivity(intent); 
+0

la domanda riguarda la specificazione di _multiple_ posizioni, non di una. –

3

Controllare questi 2 metodi, entrambi funzionano correttamente per me.

METODO 1:

String packageName = "com.google.android.apps.maps"; 
    String query = "google.navigation:q=49.4839509,8.4903999"; 

    Intent intent = this.getPackageManager().getLaunchIntentForPackage(packageName); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setData(Uri.parse(query)); 
    startActivity(intent); 

METODO 2:

String packageName = "com.google.android.apps.maps"; 
    String query = "google.navigation:q=49.4839509,8.4903999"; 

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(query)); 
    intent.setPackage(packageName); 
    startActivity(intent); 
+0

grazie per la risposta, perfettamente funzionante. –