Намерение Google Navigation для маршрута с несколькими путевыми точками

Я хочу знать, возможно ли поместить несколько "контрольных точек" в "Google Navigation" (Google Maps Navigation) с запросом, который соответствует следующему синтаксису: "google.navigation:q=44.871709,-0.505704...."

Если это возможно, каков синтаксис для отдельных двух точек?

Для одного пункта это работает, пример: "google.navigation:q=44.871709,-0.505704"

Но я бы поставил несколько контрольных точек, например:

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

Я прочитал другие вопросы, они говорят, чтобы использовать этот синтаксис:

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

При использовании вышеуказанного решения "Навигация Google" не запускается автоматически, мы должны выбрать одно приложение "Карты Google", а затем нажать "Маршрут" (вверху экрана), чтобы запустить "Навигация Google". Я хотел бы избежать этого, если это возможно.

4 ответа

Решение

Вот способ подавить диалог и перейти к картам напрямую.

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

Дайте мне знать, если у вас все еще есть проблемы.

ОБНОВИТЬ

По состоянию на май 2017 года появился более удобный подход - API URL Карт Google.

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

Используя этот API, вы можете создать URL-адрес с отправлением, назначением и путевыми точками и передать его намерению

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

Проверьте эти 2 метода, оба они работают правильно для меня.

МЕТОД 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);

МЕТОД 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);

Поскольку point1.longitude - Double, вы должны использовать это

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

Или вы можете использовать это, но это точно так же.

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

point1.toString () результат "lat/lng: (44.871709,-0.505704)", удалите "lat/lng: (" и ")". тогда вы можете получить желаемый результат.

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(")", ""))); 

Или вы можете попробовать это

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

Я надеюсь это тебе поможет.

Вы должны просто передать место назначения. Приложение Google Maps автоматически примет ваше текущее местоположение для навигации.

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

startActivity(intent);
Другие вопросы по тегам