Câu trả lời:
Bạn có thể sử dụng một cái gì đó như thế này:
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);
Để bắt đầu điều hướng từ vị trí hiện tại, hãy xóa saddr
tham số và giá trị.
Bạn có thể sử dụng một địa chỉ đường phố thực tế thay vì vĩ độ và kinh độ. Tuy nhiên, điều này sẽ cung cấp cho người dùng một hộp thoại để chọn giữa việc mở nó thông qua trình duyệt hoặc Google Maps.
Điều này sẽ kích hoạt Google Maps trực tiếp trong chế độ điều hướng:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
CẬP NHẬT
Vào tháng 5 năm 2017, Google đã ra mắt API mới cho các URL Google Maps đa nền tảng, phổ quát:
https://developers.google.com/maps/documentation/urls/guide
Bạn cũng có thể sử dụng Ý định với API mới.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Đây là một chủ đề nhỏ vì bạn đã hỏi "chỉ đường", nhưng bạn cũng có thể sử dụng lược đồ Geo URI được mô tả trong Tài liệu Android:
http://developer.android.com/guide/appcill/g-app-intents.html
Vấn đề khi sử dụng "địa lý: vĩ độ, kinh độ" là Google Maps chỉ tập trung vào điểm của bạn, không có bất kỳ mã pin hoặc nhãn nào.
Điều đó khá khó hiểu, đặc biệt nếu bạn cần chỉ đến một địa điểm chính xác hoặc / và hỏi đường.
Nếu bạn sử dụng tham số truy vấn "Geo: lat, lon? Q = name" để gắn nhãn cho công cụ địa lý của bạn, nó sẽ sử dụng truy vấn để tìm kiếm và loại bỏ các tham số lat / lon.
Tôi đã tìm thấy một cách để căn giữa bản đồ với lat / lon và hiển thị mã pin với nhãn tùy chỉnh, rất đẹp để hiển thị và hữu ích khi hỏi đường hoặc bất kỳ hành động nào khác:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
LƯU Ý (bởi @TheNail): Không hoạt động trong Bản đồ v.7 (phiên bản mới nhất tại thời điểm viết). Sẽ bỏ qua tọa độ và tìm kiếm một đối tượng có tên đã cho giữa các dấu ngoặc đơn. Xem thêm Ý định cho Google Maps 7.0.0 với vị trí
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Mặc dù các câu trả lời hiện tại rất hay, nhưng không có câu trả lời nào phù hợp với những gì tôi đang tìm kiếm, tôi chỉ muốn mở ứng dụng bản đồ, thêm tên cho từng vị trí nguồn và đích, sử dụng lược đồ URI địa lý sẽ không hiệu quả với tôi tất cả và liên kết web bản đồ không có nhãn vì vậy tôi đã đưa ra giải pháp này, về cơ bản là sự kết hợp của các giải pháp và nhận xét khác được đưa ra ở đây, hy vọng nó hữu ích cho những người khác xem câu hỏi này.
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);
Để sử dụng vị trí hiện tại của bạn làm điểm bắt đầu (tiếc là tôi chưa tìm được cách gắn nhãn vị trí hiện tại), sau đó sử dụng cách sau
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);
Để hoàn thiện, nếu người dùng không cài đặt ứng dụng bản đồ thì bạn nên bắt đầu ActivityNotFoundException, sau đó chúng tôi có thể bắt đầu lại hoạt động mà không bị hạn chế ứng dụng bản đồ, chúng tôi có thể chắc chắn rằng chúng tôi sẽ không bao giờ nhận được đến Toast ở cuối vì trình duyệt internet là một ứng dụng hợp lệ để khởi chạy lược đồ url này.
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 Bất kỳ vĩ độ hoặc kinh độ nào được sử dụng trong ví dụ của tôi không đại diện cho vị trí của tôi, bất kỳ sự tương đồng nào với một vị trí thực sự là sự trùng hợp thuần túy, còn gọi là tôi không đến từ Châu Phi: P
BIÊN TẬP:
Đối với chỉ đường, mục đích điều hướng hiện được hỗ trợ với google.navulation
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);
Sử dụng URL Google Maps đa nền tảng mới nhất : Ngay cả khi ứng dụng google maps bị thiếu, nó sẽ mở trong trình duyệt
Ví dụ 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);
Mở Google Maps bằng Intent với các chế độ khác nhau:
Chúng tôi có thể mở ứng dụng Google Maps bằng ý định:
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)
Ở đây, "mode = b" dành cho xe đạp.
Chúng ta có thể cài đặt chế độ lái xe, đi bộ và đi xe đạp bằng cách sử dụng:
Bạn có thể tìm thêm về ý định với google maps ở đây .
Lưu ý: Nếu không có lộ trình cho xe đạp / ô tô / đi bộ thì nó sẽ hiển thị cho bạn "Không thể tìm đường đến đó"
Bạn có thể kiểm tra câu trả lời ban đầu của tôi ở đây .
Bạn có thể thử mở ứng dụng Android Maps tích hợp bằng Intent.setClassName
phương pháp này.
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);
Đối với nhiều điểm, cách sau cũng có thể được sử dụng.
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);
Tập hợp tọa độ đầu tiên là vị trí bắt đầu của bạn. Tất cả tiếp theo là điểm cách, tuyến đường âm mưu đi qua.
Chỉ cần tiếp tục thêm điểm cách bằng cách kết hợp "/ vĩ độ, kinh độ" ở cuối. Rõ ràng là có giới hạn 23 điểm theo tài liệu google . Không chắc chắn nếu điều đó áp dụng cho Android quá.
Nếu bạn muốn hiển thị Vĩ độ và Kinh độ từ hướng hiện tại, bạn có thể sử dụng điều này:
Hướng dẫn luôn được đưa ra từ vị trí hiện tại của người dùng.
Các truy vấn sau đây sẽ giúp bạn thực hiện điều đó. Bạn có thể vượt qua vĩ độ và kinh độ đích ở đây:
google.navigation:q=latitude,longitude
Sử dụng ở trên như:
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);
Hoặc nếu bạn muốn hiển thị qua vị trí, hãy sử dụng:
google.navigation:q=a+street+address
Thông tin thêm tại đây: Ý định của Google Maps dành cho Android
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google DirectionsView
với vị trí nguồn là vị trí hiện tại và vị trí đích như được cung cấp dưới dạng chuỗi
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);
}
Trong phần trên destinationCityName
là một chuỗi biến đổi được sửa đổi theo yêu cầu.
thử cái này
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);
nếu bạn biết điểm A, điểm B (và bất kỳ tính năng hoặc dấu vết nào ở giữa), bạn có thể sử dụng tệp KML cùng với ý định của mình.
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);
để biết thêm thông tin, hãy xem câu trả lời SO này
LƯU Ý: ví dụ này sử dụng tệp mẫu mà (kể từ mar13) vẫn trực tuyến. nếu nó đã ngoại tuyến, hãy tìm tệp kml trực tuyến và thay đổi url của bạn
Trước tiên, bạn cần phải sử dụng mục đích ngầm, tài liệu Android cung cấp cho chúng tôi rất chi tiết ý định chung để thực hiện ý định bản đồ mà bạn cần để tạo ý định mới với hai tham số
Đối với hành động chúng ta có thể sử dụng Intent.ACTION_VIEW
và đối với Uri, chúng ta nên Xây dựng nó, bên dưới tôi đã đính kèm một mã mẫu để tạo, xây dựng, bắt đầu hoạt động.
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>
, không phải là URI mờ <scheme>:<opaque part>#<fragment>
. Đoạn mã trên mang lại URI sau: geo:/0%2C0?Eiffel%20Tower
khiến ứng dụng Google Maps bị sập. Ngay cả tài liệu chính thức cũng sử dụng URI thô / mờ vì lý do này. Mã chính xác sau đó sẽ là:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Một giải pháp kotlin hay, sử dụng câu trả lời đa nền tảng mới nhất được đề cập bởi lakshman sai ...
Mặc dù không có Uri.toString và Uri.parse không cần thiết, câu trả lời này rõ ràng và tối thiểu:
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
})
Bạn có thể Khởi chạy Google Maps Chỉ thông qua ý định trên Android thông qua cách này
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);
}
}
});