Yanıtlar:
Bunun gibi bir şey kullanabilirsiniz:
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);
Navigasyonu geçerli konumdan başlatmak için saddr
parametreyi ve değeri kaldırın .
Enlem ve boylam yerine gerçek bir sokak adresi kullanabilirsiniz. Ancak bu, kullanıcıya tarayıcı veya Google Haritalar üzerinden açma arasında seçim yapması için bir iletişim kutusu sunar.
Bu, Google Haritalar'ı doğrudan navigasyon modunda tetikleyecektir:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
GÜNCELLEME
Mayıs 2017'de Google, evrensel, platformlar arası Google Haritalar URL'leri için yeni API'yı başlattı:
https://developers.google.com/maps/documentation/urls/guide
Intents'i yeni API ile de kullanabilirsiniz.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Bu biraz konu dışı çünkü "yol tariflerini" istediniz, ancak Android Dokümantasyonunda açıklanan Coğrafi URI şemasını da kullanabilirsiniz:
http://developer.android.com/guide/appendix/g-app-intents.html
"Geo: enlem, boylam" kullanılan sorun, Google Haritalar'ın herhangi bir raptiye veya etiket olmadan yalnızca kendi noktanıza odaklanmasıdır.
Özellikle kesin bir yere işaret etmeniz ve / veya yönlendirme istemeniz gerekiyorsa bu oldukça kafa karıştırıcıdır.
Coğrafi noktanızı etiketlemek için "geo: lat, lon? Q = name" sorgu parametresini kullanırsanız, arama sorgusunu kullanır ve lat / lon parametrelerini kapatır.
Haritayı lat / lon ile ortalamanın ve özel bir etikete sahip bir pim göstermenin, görüntülemek için çok güzel ve yön veya başka bir işlem isterken kullanışlı bir yol buldum:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
NOT (@TheNail tarafından): Maps v.7'de (yazma sırasındaki en son sürüm) çalışmıyor. Koordinatları yok sayar ve parantezler arasında belirtilen ada sahip bir nesne arar. Ayrıca bkz Google Maps 7.0.0 konumu ile için Niyet
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Her ne kadar mevcut cevaplar harika olsa da, hiçbiri aradığım şeyi yapamadı, sadece haritalar uygulamasını açmak, kaynak konum ve hedefin her biri için bir ad eklemek istedim, coğrafi URI şemasını kullanarak benim için işe yaramaz ve haritalar web bağlantısının etiketleri yoktu, bu yüzden burada yapılan diğer çözümlerin ve yorumların bir birleşimi olan bu çözümü buldum, umarım bu soruyu görüntüleyen diğer kişiler için yararlıdır.
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);
Geçerli konumunuzu başlangıç noktası olarak kullanmak için (ne yazık ki geçerli konumu etiketlemenin bir yolunu bulamadım) sonra aşağıdakileri kullanın
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);
Tamlık için, kullanıcının haritalar uygulaması yüklü değilse, ActivityNotFoundException'ı yakalamak iyi bir fikir olacaktır, o zaman aktiviteyi haritalar uygulaması kısıtlaması olmadan tekrar başlatabiliriz, asla alamayacağımızdan emin olabiliriz bir internet tarayıcısı da bu url şemasını başlatmak için geçerli bir uygulama olduğundan Tost sonunda.
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 Örneğimde kullanılan herhangi bir enlem veya boylam benim konumumu temsil etmiyor, gerçek bir konuma benzerlik saf tesadüf, yani Afrika'dan değilim: P
DÜZENLE:
Yol tarifleri için artık google.navigation ile bir gezinme amacı desteklenmektedir
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);
En yeni platformlar arası Google Haritalar URL'lerini kullanma : Google Haritalar uygulaması eksik olsa bile tarayıcıda açılır
Örnek 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);
Farklı Modlarda Niyet kullanarak Google Haritalar'ı açın:
Google Haritalar uygulamasını niyet kullanarak açabiliriz:
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)
Burada "mode = b" bisiklet içindir.
Sürüş, yürüyüş ve bisiklet modunu aşağıdakileri kullanarak ayarlayabiliriz:
Google haritaları ile niyet hakkında daha fazla bilgiyi burada bulabilirsiniz .
Not: Bisiklet / araba / yürüyüş için rota yoksa, o zaman "Orada yol bulamıyorum"
Orijinal cevabımı buradan kontrol edebilirsiniz .
Bu Intent.setClassName
yöntemi kullanarak yerleşik Android Haritalar uygulamasını açmayı deneyebilirsiniz .
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);
Çok yönlü noktalar için aşağıdakiler de kullanılabilir.
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);
İlk koordinat kümesi başlangıç noktanızdır. Bir sonraki tüm yol noktaları, çizilen rota geçiyor.
Sonunda "/ enlem, boylam" sonucunu ekleyerek yol noktaları eklemeye devam edin. Google dokümanlarına göre görünüşe göre 23 yol noktası sınırı var . Bunun Android için de geçerli olup olmadığından emin değilim.
Enlem ve Boylam'ı geçerli yönden göstermek istiyorsanız, bunu kullanabilirsiniz:
Yol tarifleri her zaman kullanıcıların geçerli konumundan verilir.
Aşağıdaki sorgu bunu gerçekleştirmenize yardımcı olacaktır. Hedef enlem ve boylamı buradan iletebilirsiniz:
google.navigation:q=latitude,longitude
Yukarıdaki gibi kullanın:
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);
Veya konum üzerinden göstermek istiyorsanız şunu kullanın:
google.navigation:q=a+street+address
Daha fazla bilgi burada: Android için Google Haritalar Hedefleri
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
DirectionsView
Geçerli konum olarak kaynak konumu ve dize olarak verildiği hedef konumu olan Google
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);
}
Yukarıda destinationCityName
gerektiği gibi değiştirilmiş bir dizge değişkenidir.
bunu dene
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 noktasını, B noktasını (ve aradaki her hangi bir özellik veya parça) biliyorsanız, niyetinizle birlikte bir KML dosyası kullanabilirsiniz.
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);
daha fazla bilgi için bu SO cevabına bakınız
NOT: Bu örnekte (mar13 itibarıyla) hala çevrimiçi olan bir örnek dosya kullanılmaktadır. çevrimdışı olmuşsa, çevrimiçi bir kml dosyası bulun ve URL'nizi değiştirin
Öncelikle, örtük amacı kullanabileceğinizi bilmeniz gerekir, android dokümantasyon bize iki parametreli yeni bir amaç oluşturmak için ihtiyacınız olan harita amacını uygulamak için çok ayrıntılı bir ortak amaç sağlar
Eylem Intent.ACTION_VIEW
için kullanabiliriz ve Uri için biz inşa etmeliyim, aşağıda etkinliği oluşturmak, oluşturmak, başlatmak için bir örnek kod ekledim.
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>
opak URI'ler için değil <scheme>:<opaque part>#<fragment>
. Yukarıdaki kod şu URI'yi verir: geo:/0%2C0?Eiffel%20Tower
Google Haritalar uygulamasının kilitlenmesine neden olur. Resmi belgeler bile bu nedenle ham / opak URI'ler kullanıyor. Doğru kod daha sonra şöyle olur:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Lakhman Sai tarafından bahsedilen en son platformlar arası cevabı kullanan güzel bir kotlin çözümü ...
Gereksiz Uri.toString ve Uri.parse yok, bu cevap temiz ve minimal:
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 Haritalar Yol Tariflerini bu şekilde Android'deki bir niyetle başlatabilirsiniz
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);
}
}
});