Ответы:
Вы можете использовать что-то вроде этого:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
Чтобы начать навигацию с текущего местоположения, удалите saddr
параметр и значение.
Вы можете использовать фактический адрес улицы вместо широты и долготы. Однако это даст пользователю возможность выбора между открытием через браузер или Google Maps.
Это запустит Google Maps в режиме навигации напрямую:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
ОБНОВИТЬ
В мае 2017 года Google запустил новый API для универсальных кроссплатформенных URL-адресов Карт Google:
https://developers.google.com/maps/documentation/urls/guide
Вы также можете использовать Intents с новым API.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Это немного не по теме, потому что вы спрашивали «указания», но вы также можете использовать схему Geo URI, описанную в документации Android:
http://developer.android.com/guide/appendix/g-app-intents.html
Проблема с использованием «гео: широта, долгота» заключается в том, что Карты Google центрируются только в вашей точке без каких-либо булавок или меток.
Это довольно запутанно, особенно если вам нужно указать точное место или / и попросить указания.
Если вы используете параметр запроса "geo: lat, lon? Q = name" для того, чтобы пометить свое геопункт, он использует запрос для поиска и отклоняет параметры lat / lon.
Я нашел способ центрировать карту с широтой / долготой и отобразить булавку с пользовательской меткой, что очень удобно для отображения и полезно при запросе указаний или любых других действий:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
ПРИМЕЧАНИЕ (от @TheNail): не работает в Maps v.7 (последняя версия на момент написания). Будет игнорировать координаты и искать объект с заданным именем в скобках. См. Также Назначение для Google Maps 7.0.0 с указанием местоположения.
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Хотя текущие ответы великолепны, ни один из них не сделал то, что я искал, я хотел открыть только приложение карт, добавить имя для каждого исходного местоположения и пункта назначения, используя схему гео-URI для меня и вообще, на веб-ссылке на картах не было ярлыков, поэтому я пришел к этому решению, которое, по сути, представляет собой объединение других решений и комментариев, сделанных здесь, надеюсь, это будет полезно для других, просматривающих этот вопрос.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
Чтобы использовать ваше текущее местоположение в качестве отправной точки (к сожалению, я не нашел способа обозначить текущее местоположение), используйте следующее
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
Для полноты, если у пользователя нет установленного приложения карт, то будет хорошей идеей перехватить ActivityNotFoundException, тогда мы сможем начать действие снова без ограничения приложения карт, мы можем быть уверены, что никогда не получим Toast в конце, так как интернет-браузер является допустимым приложением для запуска этой схемы URL.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
}
}
PS Любые широты или долготы, использованные в моем примере, не являются репрезентативными для моего местоположения, любое сходство с истинным местоположением является чистым совпадением, иначе я не из Африки: P
РЕДАКТИРОВАТЬ:
Для указаний теперь поддерживается навигация с помощью google.navigation.
Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f +"," + 2f);//creating intent with latlng
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Использование последних кроссплатформенных URL Карт Google : даже если приложение Google Maps отсутствует, оно откроется в браузере
Пример https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("www.google.com")
.appendPath("maps")
.appendPath("dir")
.appendPath("")
.appendQueryParameter("api", "1")
.appendQueryParameter("destination", 80.00023 + "," + 13.0783);
String url = builder.build().toString();
Log.d("Directions", url);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Откройте Google Карты, используя Intent с разными режимами:
Мы можем открыть приложение Google Maps, используя намерение:
val gmmIntentUri = Uri.parse("google.navigation:q="+destintationLatitude+","+destintationLongitude + "&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
Здесь «mode = b» для велосипеда.
Мы можем установить режимы вождения, ходьбы и езды на велосипеде, используя:
Вы можете узнать больше о намерениях с Google Maps здесь .
Примечание: если нет маршрута для велосипеда / автомобиля / пешехода, он покажет вам «Не могу найти дорогу туда»
Вы можете проверить мой оригинальный ответ здесь .
Ну, вы можете попробовать открыть встроенное приложение Android Maps с помощью Intent.setClassName
метода.
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.827500,-122.481670"));
i.setClassName("com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(i);
Для нескольких точек маршрута также могут быть использованы следующие.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("https://www.google.com/maps/dir/48.8276261,2.3350114/48.8476794,2.340595/48.8550395,2.300022/48.8417122,2.3028844"));
startActivity(intent);
Первый набор координат - ваше начальное местоположение. Все следующие являются путевыми точками, проложенный маршрут проходит.
Просто продолжайте добавлять путевые точки, указав в конце «/ широта, долгота». Существует, по-видимому, ограничение в 23 путевых точки в соответствии с Google Docs . Не уверен, что это относится и к Android.
Если вы заинтересованы в отображении широты и долготы от текущего направления, вы можете использовать это:
Направления всегда даны от текущего местоположения пользователей.
Следующий запрос поможет вам выполнить это. Вы можете передать широту и долготу пункта назначения здесь:
google.navigation:q=latitude,longitude
Используйте выше как:
Uri gmmIntentUri = Uri.parse("google.navigation:q=latitude,longitude");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Или, если вы хотите показать через местоположение, используйте:
google.navigation:q=a+street+address
Больше информации здесь: Google Maps Intents для Android
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google DirectionsView
с местоположением источника в качестве текущего местоположения и местоположения пункта назначения, заданного в виде строки
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&daddr="+destinationCityName));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
В приведенном выше destinationCityName
тексте строка может быть изменена при необходимости.
попробуй это
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+src_lat+","+src_ltg+"&daddr="+des_lat+","+des_ltg));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
если вы знаете точку A, точку B (и любые другие объекты или дорожки между ними), вы можете использовать файл KML вместе со своими намерениями.
String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
для получения дополнительной информации см. этот SO ответ
ПРИМЕЧАНИЕ. В этом примере используется образец файла, который (по состоянию на 13 марта) все еще находится в сети. если он отключился, найдите файл kml в Интернете и измените свой URL
Прежде всего вам нужно теперь, чтобы вы могли использовать неявное намерение, документация Android предоставляет нам очень подробные общие намерения для реализации намерения карты, вам нужно создать новое намерение с двумя параметрами
Для действий, которые мы можем использовать, Intent.ACTION_VIEW
а для Uri мы должны построить его, ниже я приложил пример кода для создания, построения и запуска действия.
String addressString = "1600 Amphitheatre Parkway, CA";
/*
Build the uri
*/
Uri.Builder builder = new Uri.Builder();
builder.scheme("geo")
.path("0,0")
.query(addressString);
Uri addressUri = builder.build();
/*
Intent to open the map
*/
Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);
/*
verify if the devise can launch the map intent
*/
if (intent.resolveActivity(getPackageManager()) != null) {
/*
launch the intent
*/
startActivity(intent);
}
<scheme>://<authority><absolute path>?<query>#<fragment>
не непрозрачных URI <scheme>:<opaque part>#<fragment>
. Приведенный выше код приводит к следующему URI: geo:/0%2C0?Eiffel%20Tower
что приводит к сбою приложения Google Maps. По этой же причине даже официальная документация использует необработанные / непрозрачные URI. Правильный код будет:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Хорошее решение kotlin, использующее последний кроссплатформенный ответ, упомянутый lakshman sai ...
Нет ненужных Uri.toString и Uri.parse, хотя этот ответ чистый и минимальный:
val intentUri = Uri.Builder().apply {
scheme("https")
authority("www.google.com")
appendPath("maps")
appendPath("dir")
appendPath("")
appendQueryParameter("api", "1")
appendQueryParameter("destination", "${yourLocation.latitude},${yourLocation.longitude}")
}.build()
startActivity(Intent(Intent.ACTION_VIEW).apply {
data = intentUri
})
Таким способом вы можете запустить Google Maps Directions через Android
btn_search_route.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String source = et_source.getText().toString();
String destination = et_destination.getText().toString();
if (TextUtils.isEmpty(source)) {
et_source.setError("Enter Soruce point");
} else if (TextUtils.isEmpty(destination)) {
et_destination.setError("Enter Destination Point");
} else {
String sendstring="http://maps.google.com/maps?saddr=" +
source +
"&daddr=" +
destination;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(sendstring));
startActivity(intent);
}
}
});