ฟีดข้อมูลแบบเลี้ยวต่อเลี้ยวจะให้ข้อมูลการนำทางเท่านั้นแก่อุปกรณ์ที่ไม่ได้ออกแบบมาสำหรับคำแนะนำการนำทางตามแผนที่ โดยมีองค์ประกอบที่ จัดเตรียมไว้ให้ในเร็วๆ นี้
- ไอคอน (ซ้าย ขวา กลับรถ)
- เปิดเลขในวงเวียน
- ชื่อถนน
- ระยะทางและเวลาโดยประมาณไปยังขั้นตอนการนำทางถัดไปหรือ จุดหมายสุดท้าย
คุณสามารถใช้ฟีดแบบเลี้ยวต่อเลี้ยวเพื่อสร้างประสบการณ์ที่ UI การนำทาง SDK แบบเต็มไม่เหมาะสม เช่น สำหรับ Android Auto หรือสำหรับหน้าจอขนาดเล็กที่ Android สแต็กเต็มรูปแบบไม่พร้อมใช้งาน ตัวอย่างเช่น คุณอาจใช้วิธีนี้สำหรับผู้ขับขี่ยานพาหนะ 2 ล้อ ซึ่งสามารถฉายภาพคำแนะนำการนำทางเท่านั้น เพื่อช่วยให้พวกเขาไปถึงจุดหมายได้เร็วขึ้นและมั่นใจมากขึ้นโดยมีสิ่งรบกวนน้อยที่สุด
ในการใช้ SDK คุณจะต้องสร้างบริการและลงทะเบียนบริการกับ Navigation SDK สำหรับ Android เพื่อให้ได้รับข้อมูลการนำทางใหม่ในแบบเรียลไทม์ (ประมาณ 1 วินาทีระหว่างการนำทาง)
เอกสารนี้แสดงวิธีสร้างและลงทะเบียนบริการการนำทางที่รับข้อมูลการนำทางจาก SDK และระบุสถานะการนำทางไปยังอุปกรณ์ที่รับ
ภาพรวม
ส่วนนี้จะอธิบายวิธีเพิ่มไลบรารี TurnByTurn ลงในโปรเจ็กต์ของคุณและสรุปโฟลว์ระดับสูงสำหรับการสร้างฟังก์ชันแบบเลี้ยวต่อเลี้ยว
เพิ่มไลบรารี TurnByTurn ลงในโปรเจ็กต์ของคุณโดยใช้ Maven (แนะนำ)
หากต้องการใช้ไลบรารี TurnByTurn เวอร์ชันสแตนด์อโลน ให้ทำตามขั้นตอนต่อไปนี้
ตั้งค่าสภาพแวดล้อมเพื่อเข้าถึงที่เก็บ Maven ของโฮสต์ตามที่อธิบายไว้ในการเริ่มต้นใช้งาน SDK ไดรเวอร์ในเอกสารประกอบเกี่ยวกับการเดินทางและการสั่งซื้อ
เพิ่มทรัพยากร Dependency ต่อไปนี้ในการกำหนดค่า Maven หรือ Gradle
Maven
<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>google_turnbyturn</artifactId> <version>1.0.0</version> </dependency> </dependencies>
Gradle
dependencies { ... implementation 'com.google.android.maps:google_turnbyturn:1.0.0' }
เพิ่มไลบรารี TurnByTurn ลงในโปรเจ็กต์ของคุณโดยใช้ไฟล์ JAR ที่ดาวน์โหลดมา (ทางเลือก)
ไลบรารี TurnByTurn เป็นไฟล์ JAR ในโฟลเดอร์ SDK นี้ หากไม่มีสิทธิ์เข้าถึง โปรดติดต่อตัวแทน
- ดาวน์โหลดและปลดซิป
google_turnbyturn_*.jar
- คัดลอกไฟล์ JAR ที่ดาวน์โหลดไว้ในไดเรกทอรี
app/libs
ของโปรเจ็กต์ เพิ่มโค้ดต่อไปนี้ลงใน
build.gradle
เพื่อรวม JAR ในบิลด์dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
การใช้ไลบรารี TurnByTurn
ต่อไปนี้เป็นขั้นตอนระดับสูงสำหรับการเปิดใช้ฟังก์ชันแบบเลี้ยวต่อเลี้ยว เนื้อหาต่อไปนี้จะแสดงรายละเอียดเกี่ยวกับแต่ละขั้นตอน
สร้างบริการเพื่อรับข้อมูลอัปเดตเกี่ยวกับการไปยังส่วนต่างๆ {#service}
Navigation SDK จะเชื่อมโยงกับบริการ TurnByTurn ของคุณและส่งการอัปเดตการนำทางผ่าน Android Messenger โดยคุณจะสร้างบริการนำทางใหม่สำหรับการอัปเดตเหล่านี้ หรือจะใช้บริการที่มีอยู่ก็ได้
ประโยชน์ของการใช้บริการเพื่อรับอัปเดตการนำทางคือ บริการดังกล่าวอาจอยู่ในกระบวนการเบื้องหลังที่แยกต่างหาก
บริการในตัวอย่างต่อไปนี้จะรับข้อมูลการนำทาง และใช้ TurnByTurnManager
เพื่อแปลงข้อมูลเป็นออบเจ็กต์ NavInfo
ที่มีรายละเอียดการนำทาง
/** * Receives turn-by-turn navigation information forwarded from NavSDK. */ public class NavInfoReceivingService extends Service { /** The messenger used by the service to receive nav step updates. */ private Messenger incomingMessenger; private TurnByTurnManager turnByTurnManager; private final class IncomingNavStepHandler extends Handler { public IncomingNavStepHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // Identify the message through the msg.what field. if (TurnByTurnManager.MSG_NAV_INFO == msg.what) { // Extract the NavInfo object using the TurnByTurnManager. NavInfo navInfo = turnByTurnManager .readNavInfoFromBundle(msg.getData())); // Do something with the NavInfo } } } @Nullable @Override public IBinder onBind(Intent intent) { return incomingMessenger.getBinder(); } @Override public void onCreate() { turnByTurnManager = TurnByTurnManager.createInstance(); HandlerThread thread = new HandlerThread("NavInfoReceivingService", Process.THREAD_PRIORITY_DEFAULT); thread.start(); incomingMessenger = new Messenger( new IncomingNavStepHandler(thread.getLooper())); }
รหัสข้อความ
ระบบจะระบุข้อความ NavInfo
ได้ผ่านช่อง Message.what ของคลาส Message
ซึ่งตั้งค่าเป็น TurnByTurnManager.MSG_NAV_INFO
กำลังลงทะเบียนบริการเพื่อรับการอัปเดตการนำทาง {#register}
ข้อมูลโค้ดต่อไปนี้จะบันทึกบริการการนำทาง
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
การเริ่มและการหยุดบริการ
บริการการนำทางทำงานอยู่ตราบใดที่ SDK การนำทางเชื่อมโยงกับบริการนั้น คุณเรียกใช้ startService()
และ stopService()
ด้วยตนเองเพื่อควบคุมวงจรการใช้งานบริการการนำทางได้ แต่เมื่อคุณลงทะเบียนบริการกับ
Navigation SDK บริการจะเริ่มต้นโดยอัตโนมัติ และจะหยุดลงเมื่อคุณยกเลิกการลงทะเบียนเท่านั้น คุณอาจต้องการพิจารณาเริ่มต้นบริการที่ทำงานอยู่เบื้องหน้าตามที่อธิบายไว้ในภาพรวมของบริการในเอกสารประกอบสำหรับ Android ทั้งนี้ขึ้นอยู่กับวิธีตั้งค่าแอป
กำลังยกเลิกการลงทะเบียนบริการ
หากต้องการหยุดอัปเดตการนำทาง ให้ยกเลิกการลงทะเบียนบริการจาก Navigation SDK
navigator.unregisterServiceForNavUpdates();
ทําความเข้าใจสถานะการนําทาง {#states}
ใช้ NavInfo.getNavState()
เพื่อรับสถานะปัจจุบันของการนำทาง ซึ่งมีดังนี้
EnRoute - สถานะ
ENROUTE
หมายความว่าการนําทางด้วยคําแนะนําที่ใช้งานอยู่ในขณะนี้ และผู้ใช้อยู่ในเส้นทางที่ระบุ มีข้อมูลเกี่ยวกับขั้นตอนการเตรียมความพร้อม ที่กำลังจะมาถึงในปัจจุบันกำลังเปลี่ยนเส้นทาง -
REROUTING
หมายความว่าการนำทางอยู่ระหว่างดำเนินการ แต่การนำทางกำลังมองหาเส้นทางใหม่ ขั้นตอนการบังคับทิศทางที่กำลังจะมาถึงไม่พร้อมใช้งาน เพราะยังไม่มีเส้นทางใหม่ ในตัวอย่างแอป ข้อความ "กำลังเปลี่ยนเส้นทาง..." จะปรากฏในการแสดงข้อมูลการนำทาง เมื่อพบเส้นทางแล้ว ระบบจะส่งข้อความNavInfo
ด้วยสถานะENROUTE
หยุด -
STOPPED
หมายความว่าการนำทางสิ้นสุดแล้ว เช่น การนำทางจะหยุดเมื่อผู้ใช้ออกจากการนำทางในแอป ส่วนในแอปตัวอย่าง สถานะSTOPPED
จะล้างการแสดงข้อมูลการนำทางเพื่อไม่ให้แสดงวิธีการของขั้นตอนค้างไว้
ป้อนข้อมูลที่แสดงฟีด
ตอนนี้คุณได้ตั้งค่าบริการแบบเลี้ยวต่อเลี้ยวแล้ว ส่วนนี้จะครอบคลุมองค์ประกอบภาพและข้อความที่คุณสามารถใช้เพื่อป้อนข้อมูลการ์ดคำแนะนำสำหรับฟีดแบบเลี้ยวต่อเลี้ยว
ช่องข้อมูลการ์ดการนําทาง
เมื่อคนขับเข้าสู่การนำทางพร้อมคำแนะนำ การ์ดการนำทางจะปรากฏที่ด้านบน ซึ่งมีวันที่การนำทางซึ่งป้อนข้อมูลจาก Navigation SDK รูปภาพที่เกี่ยวข้องแสดงตัวอย่างองค์ประกอบการนำทางที่สำคัญเหล่านี้
ตารางนี้แสดงช่องสำหรับข้อมูลการนำทางและตําแหน่งที่คุณพบ
ช่องสำหรับการนำทางแต่ละขั้นตอน | ช่องสําหรับการเดินทางโดยรวม |
---|---|
พบใน StepInfo |
พบใน NavInfo |
ชื่อเต็มของถนน | เวลาที่เหลือ |
ไอคอนเคลื่อนที่ | ระยะทางถึงจุดหมาย |
ระยะห่างไปยังขั้นตอนถัดไป | |
ช่องคำแนะนำช่องทาง |
คำแนะนำช่องทาง
Navigation SDK แสดงช่องทางในการ์ดเลี้ยวการนำทางเป็นออบเจ็กต์ข้อมูล Lane และ LaneDirection วัตถุ Lane
แสดงช่องทางที่เฉพาะเจาะจงระหว่างการนำทางและมีรายการวัตถุ LaneDirection
รายการที่อธิบายถึงการเลี้ยวทั้งหมดที่ทำได้จากช่องทางนี้
เส้นทางที่แนะนำที่ผู้ขับควรใช้ในเลนจะมีเครื่องหมายผ่านช่อง isRecommended
ตัวอย่างคำแนะนำช่องทาง
ตัวอย่างต่อไปนี้แสดงการนำเสนอข้อมูลของช่องทางที่แสดงอยู่ด้านบน
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
สร้างไอคอนสำหรับการบังคับทิศทาง
enum ของ Maneuver
จะระบุการบังคับทิศทางที่เป็นไปได้แต่ละรายการที่อาจเกิดขึ้นขณะนำทาง และคุณสามารถรับการนำทางสำหรับขั้นตอนที่ระบุได้จากเมธอด StepInfo.getManeuver()
คุณต้องสร้างไอคอนบังคับและจับคู่กับเครื่องมือที่เกี่ยวข้อง
ในบางวิธี คุณยังตั้งค่าการจับคู่แบบหนึ่งต่อหนึ่งกับไอคอนได้ เช่น DESTINATION_LEFT
และ DESTINATION_RIGHT
แต่เนื่องจากมีการใช้วิธีการบางอย่างที่คล้ายกัน
คุณอาจต้องแมปการนำทางมากกว่า 1 รายการกับไอคอนเดียว ตัวอย่างเช่น TURN_LEFT
และ ON_RAMP_LEFT
สามารถจับคู่กับไอคอนเลี้ยวซ้ายได้
การวางแผนบางรายการมีป้ายกำกับ clockwise
หรือ counterclockwise
เพิ่มเติมซึ่ง SDK กำหนดโดยอิงตามด้านการขับรถของประเทศ ตัวอย่างเช่น ในประเทศที่การขับรถอยู่บนด้านซ้ายของถนน ผู้ขับจะวนเวียนหรือกลับรถในทิศทางตามเข็มนาฬิกา ขณะที่ประเทศที่อยู่ด้านขวาสุดถนนจะวิ่งตามเข็มนาฬิกา Navigation SDK จะตรวจจับว่าการขับขี่เกิดขึ้นในการรับส่งข้อมูลด้านซ้ายหรือด้านขวา และเอาต์พุตที่เหมาะสม ดังนั้น ไอคอนเคลื่อนที่จึงอาจแตกต่างกัน
ในการเคลื่อนไหว 1 ทวนและทวนเข็มนาฬิกา
ขยายเพื่อดูตัวอย่างไอคอนสำหรับการบังคับแบบต่างๆ
ไอคอนตัวอย่าง | การขับขี่แบบ TurnByTurn |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_RAMP_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
|
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
|
ROUNDABOUT_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_CLOCKWISE
|
|
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_EXIT_CLOCKWISE
|
|
MERGE_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
|
MERGE_UNSPECIFIED
|
|
DESTINATION
|
|
DESTINATION_RIGHT
|
|
DESTINATION_LEFT
|
|
FERRY_BOAT
|
|
FERRY_TRAIN
|
ใช้ไอคอนที่สร้างขึ้น
SDK การนำทางรองรับการสร้างไอคอนแนะนำเส้นทางและไอคอนแนะนำช่องทาง เพื่ออำนวยความสะดวกใน Use Case ของ Android Auto ไอคอนเหล่านี้ตรงตามคำแนะนำด้านขนาดภาพของไลบรารีแอป Android Auto ในรถยนต์ที่แนะนำการกําหนดเป้าหมายเป็นกรอบล้อมรอบขนาด 500 x 74 dp ดูรายละเอียดได้ที่ setsLaneImage และ CarIcon ในเอกสารอ้างอิงของ Android
ตัวอย่างการสร้างไอคอน
NavigationUpdatesOptions options =
NavigationUpdatesOptions.builder()
.setNumNextStepsToPreview(numNextStepsToPreview)
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
.setDisplayMetrics(getResources().getDisplayMetrics())
.build();
boolean isRegistered =
navigator.registerServiceForNavUpdates(
getPackageName(),
NavInfoReceivingService.class.getName(),
options);
หลังจากเปิดใช้การสร้างไอคอน ออบเจ็กต์ TurnbyTurn StepInfo
จะสร้างช่อง maneuverBitmap และ lanesBitmap พร้อมไอคอน
ขั้นตอนถัดไป
- สำหรับแอป Android Auto: