Jawaban:
Anda dapat menggunakan sesuatu seperti ini:
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);
Untuk memulai navigasi dari lokasi saat ini, hapus saddr
parameter dan nilai.
Anda dapat menggunakan alamat jalan yang sebenarnya, bukan lintang dan bujur. Namun ini akan memberikan pengguna dialog untuk memilih antara membukanya melalui browser atau Google Maps.
Ini akan menjalankan Google Maps dalam mode navigasi langsung:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
MEMPERBARUI
Pada Mei 2017 Google meluncurkan API baru untuk URL Google Maps lintas platform universal:
https://developers.google.com/maps/documentation/urls/guide
Anda dapat menggunakan Intents dengan API baru juga.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Ini sedikit di luar topik karena Anda meminta "arah", tetapi Anda juga dapat menggunakan skema Geo URI yang dijelaskan dalam Dokumentasi Android:
http://developer.android.com/guide/appendix/g-app-intents.html
Masalah menggunakan "geo: latitude, longitude" adalah bahwa Google Maps hanya terpusat pada titik Anda, tanpa pin atau label.
Itu cukup membingungkan, terutama jika Anda perlu menunjuk ke tempat yang tepat atau / dan menanyakan arah.
Jika Anda menggunakan parameter kueri "geo: lat, lon? Q = name" untuk memberi label geopoint Anda, ia menggunakan kueri untuk pencarian dan mengabaikan parameter lat / lon.
Saya menemukan cara untuk memusatkan peta dengan lat / lon dan menampilkan pin dengan label khusus, sangat bagus untuk ditampilkan dan berguna ketika menanyakan arah atau tindakan lain:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
CATATAN (oleh @TheNail): Tidak berfungsi di Maps v.7 (versi terbaru saat penulisan). Akan mengabaikan koordinat dan mencari objek dengan nama yang diberikan di antara tanda kurung. Lihat juga Intent untuk Google Maps 7.0.0 dengan lokasi
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Meskipun jawaban saat ini sangat bagus, tidak ada yang melakukan apa yang saya cari, saya ingin membuka aplikasi peta saja, menambahkan nama untuk setiap lokasi sumber dan tujuan, menggunakan skema geo URI tidak akan bekerja untuk saya sama sekali dan tautan web peta tidak memiliki label, jadi saya datang dengan solusi ini, yang pada dasarnya merupakan gabungan dari solusi dan komentar lain yang dibuat di sini, semoga bermanfaat bagi orang lain yang melihat pertanyaan ini.
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);
Untuk menggunakan lokasi Anda saat ini sebagai titik awal (sayangnya saya belum menemukan cara untuk memberi label lokasi saat ini) kemudian gunakan yang berikut ini
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);
Untuk kelengkapan, jika pengguna tidak memiliki aplikasi peta yang diinstal maka itu akan menjadi ide yang bagus untuk menangkap ActivityNotFoundException, maka kita dapat memulai aktivitas lagi tanpa pembatasan aplikasi peta, kita dapat cukup yakin bahwa kita tidak akan pernah mendapatkan ke Toast pada akhirnya karena browser internet adalah aplikasi yang valid untuk meluncurkan skema url ini juga.
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 Setiap lintang atau bujur yang digunakan dalam contoh saya tidak mewakili lokasi saya, kemiripan dengan lokasi sebenarnya adalah kebetulan murni, alias saya bukan dari Afrika: P
EDIT:
Untuk petunjuk arah, maksud navigasi sekarang didukung dengan 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);
Menggunakan URL Google Maps lintas-platform terbaru : Bahkan jika aplikasi google maps tidak ada, itu akan terbuka di browser
Contoh 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);
Buka Google Maps menggunakan Intent dengan Mode yang berbeda:
Kami dapat membuka aplikasi Google Maps menggunakan niat:
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)
Di sini, "mode = b" adalah untuk sepeda.
Kita dapat mengatur mode mengemudi, berjalan, dan bersepeda dengan menggunakan:
Anda dapat menemukan lebih banyak tentang niat dengan peta google di sini .
Catatan: Jika tidak ada rute untuk sepeda / mobil / berjalan maka itu akan menunjukkan kepada Anda "Tidak dapat menemukan jalan ke sana"
Anda dapat memeriksa jawaban asli saya di sini .
Nah Anda bisa mencoba membuka aplikasi bawaan Android Maps dengan menggunakan Intent.setClassName
metode tersebut.
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);
Untuk beberapa titik jalan, berikut ini dapat digunakan juga.
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);
Set koordinat pertama adalah lokasi awal Anda. Semua berikutnya adalah titik jalan, rute yang direncanakan melewati.
Terus tambahkan titik jalan dengan menyimpulkan "/ lintang, bujur" di akhir. Tampaknya ada batas 23 titik jalan menurut google docs . Tidak yakin apakah itu berlaku untuk Android juga.
Jika Anda tertarik untuk menunjukkan Lintang dan Bujur dari arah saat ini, Anda dapat menggunakan ini:
Petunjuk selalu diberikan dari lokasi pengguna saat ini.
Permintaan berikut akan membantu Anda melakukan itu. Anda dapat melewati garis lintang dan bujur tujuan di sini:
google.navigation:q=latitude,longitude
Gunakan di atas sebagai:
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);
Atau jika Anda ingin tampil melalui lokasi, gunakan:
google.navigation:q=a+street+address
Info lebih lanjut di sini: Google Maps Intents untuk Android
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google DirectionsView
dengan lokasi sumber sebagai lokasi saat ini dan lokasi tujuan sebagaimana diberikan sebagai string
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);
}
Dalam contoh di atas destinationCityName
adalah string yang dapat dimodifikasi yang diperlukan.
coba ini
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);
jika Anda tahu titik A, titik B (dan fitur apa pun atau jejak di antaranya) Anda dapat menggunakan file KML bersama dengan niat Anda.
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);
untuk info lebih lanjut, lihat jawaban SO ini
CATATAN: contoh ini menggunakan file sampel yang (pada Maret13) masih online. jika sudah luring, cari file kml daring dan ubah url Anda
Pertama, Anda perlu sekarang bahwa Anda dapat menggunakan maksud tersirat, dokumentasi android memberi kami maksud umum yang sangat terperinci untuk mengimplementasikan maksud peta yang Anda butuhkan untuk membuat maksud baru dengan dua parameter
Untuk tindakan yang dapat kita gunakan Intent.ACTION_VIEW
dan untuk Uri kita harus membangunnya, di bawah ini saya melampirkan kode sampel untuk membuat, membangun, memulai aktivitas.
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>
bukan URI buram <scheme>:<opaque part>#<fragment>
. Kode di atas menghasilkan URI berikut: geo:/0%2C0?Eiffel%20Tower
yang menyebabkan aplikasi Google Maps mogok. Bahkan dokumentasi resmi menggunakan URI mentah / buram untuk alasan ini. Kode yang benar akan menjadi:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Solusi kotlin yang bagus, menggunakan jawaban lintas-platform terbaru yang disebutkan oleh ...
Tidak ada Uri.toString yang tidak perlu dan Uri.parse, jawaban ini bersih dan 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
})
Anda dapat Meluncurkan Google Maps Directions melalui niat di Android melalui cara ini
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);
}
}
});