Намерение 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);