Відповіді:
Ви можете використовувати щось подібне:
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.
Це призведе безпосередньо до запуску Карт Google у режимі навігації:
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.
Я знайшов спосіб центрувати карту за допомогою 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 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, тоді ми зможемо знову розпочати діяльність без обмеження програми Maps, ми можемо бути впевнені, що ми ніколи не отримаємо в тост наприкінці, оскільки Інтернет-браузер є дійсною програмою для запуску цієї 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 за допомогою намірів із різними режимами:
Ми можемо відкрити додаток 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)
Тут "режим = 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);
Перший набір координат - це ваше початкове місце розташування. Усі наступні - це шляхові точки, прокладений намічений маршрут.
Просто продовжуйте додавати крапкові точки, визначаючи "/ широту, довготу" в кінці. Згідно з документами google, очевидно, існує обмеження на 23 точки . Не впевнений, чи це стосується і 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 для 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);
якщо ви знаєте точку А, точку В (і будь-які функції або треки між ними), ви можете використовувати файл 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);
для отримання додаткової інформації дивіться цю відповідь
ПРИМІТКА. У цьому прикладі використовується зразок файлу, який (станом на mar13) все ще є в Інтернеті. якщо він перейшов у режим офлайн, знайдіть файл 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, використовуючи останню відповідь між платформами, про яку згадував Лакшман Сай ...
Немає зайвих 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 через наміри на 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);
}
}
});