แอพของฉันต้องแสดงเส้นทาง Google Maps จาก A ถึง B แต่ฉันไม่ต้องการใส่ Google Maps ไว้ในแอปพลิเคชันของฉัน - แทนฉันต้องการเปิดใช้งานด้วยเจตนา เป็นไปได้ไหม ถ้าใช่เป็นอย่างไร
แอพของฉันต้องแสดงเส้นทาง Google Maps จาก A ถึง B แต่ฉันไม่ต้องการใส่ Google Maps ไว้ในแอปพลิเคชันของฉัน - แทนฉันต้องการเปิดใช้งานด้วยเจตนา เป็นไปได้ไหม ถ้าใช่เป็นอย่างไร
คำตอบ:
คุณสามารถใช้สิ่งนี้:
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 แผนที่สว่างขึ้นในโหมดนำทางโดยตรง:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
UPDATE
ในเดือนพฤษภาคม 2560 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
ปัญหาในการใช้ "geo: ละติจูด, ลองจิจูด" ก็คือ Google แผนที่จะอยู่ตรงจุดที่คุณอยู่
ค่อนข้างจะสับสนโดยเฉพาะถ้าคุณต้องการชี้ไปยังสถานที่ที่แน่นอนหรือขอเส้นทาง
หากคุณใช้พารามิเตอร์การสืบค้น "geo: lat, lon? q = name" เพื่อติดป้ายกำกับ geopoint ของคุณจะใช้การสืบค้นเพื่อค้นหาและยกเลิกพารามิเตอร์ 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 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);
เพื่อความสมบูรณ์ถ้าผู้ใช้ไม่ได้ติดตั้งแอพ Maps มันจะเป็นความคิดที่ดีที่จะจับ ActivityNotFoundException จากนั้นเราสามารถเริ่มต้นกิจกรรมอีกครั้งโดยไม่มีข้อ จำกัด ของแอพ Maps เราค่อนข้างแน่ใจว่าเราจะไม่ได้รับ to 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();
}
}
ป.ล. ละติจูดหรือลองจิจูดใด ๆ ที่ใช้ในตัวอย่างของฉันไม่ได้เป็นตัวแทนของที่ตั้งของฉันภาพใด ๆ ที่เป็นจริงคือความบังเอิญที่บริสุทธิ์หรือที่ฉันไม่ได้มาจากแอฟริกา: 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 Maps โดยใช้เจตนาด้วยโหมดที่แตกต่างกัน:
เราสามารถเปิดแอป 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 ที่นี่
หมายเหตุ: หากไม่มีเส้นทางสำหรับรถจักรยาน / รถยนต์ / เดินแล้วมันจะแสดงให้คุณเห็น "ไม่สามารถหาทางที่นั่น"
คุณสามารถลองเปิดแอปพลิเคชั่น 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 แผนที่สำหรับ 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
เป็นสตริง varaiable แก้ไขได้ตามต้องการ
ลองนี้
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);
นี่คือสิ่งที่ได้ผลสำหรับฉัน:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://maps.google.co.in/maps?q=" + yourAddress));
if (intent.resolveActivity(getPackageManager()) != null) {
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 นี้
หมายเหตุ: ตัวอย่างนี้ใช้ไฟล์ตัวอย่างที่ (ณ วันที่ 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>
, <scheme>:<opaque part>#<fragment>
ยูริไม่ทึบแสง โค้ดด้านบนให้ผลตอบแทน URI ต่อไปนี้: geo:/0%2C0?Eiffel%20Tower
ซึ่งทำให้แอป Google Maps ขัดข้อง แม้แต่เอกสารอย่างเป็นทางการก็ใช้ URIs ดิบ / ทึบแสงด้วยเหตุผลอย่างนี้ รหัสที่ถูกต้องนั้นจะเป็น: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);
}
}
});