ฟีดข้อมูลแบบเลี้ยวต่อเลี้ยวจะให้ข้อมูลการนำทางเท่านั้นแก่อุปกรณ์ที่ไม่ได้ออกแบบมาเพื่อคำแนะนำการนำทางตามแผนที่ โดยจะแสดงการบังคับทิศทางที่กำลังจะเกิดขึ้นพร้อมองค์ประกอบที่คุณระบุ ดังนี้
- ไอคอน (ซ้าย ขวา กลับรถ)
- หมายเลขทางเลี้ยวในวงเวียน
- ชื่อถนน
- ระยะทางและเวลาโดยประมาณไปยังขั้นตอนการนำทางถัดไปหรือจุดหมายปลายทาง
คุณสามารถใช้ฟีดแบบเลี้ยวต่อเลี้ยวเพื่อสร้างประสบการณ์ที่ UI ของ Navigation SDK แบบเต็มไม่เหมาะสม เช่น สำหรับ Android Auto หรือจอแสดงผลขนาดเล็กที่ไม่มี Android Stack แบบเต็ม ตัวอย่างเช่น คุณอาจใช้ฟีเจอร์นี้กับผู้ขับขี่ยานพาหนะ 2 ล้อ โดยสามารถแสดงคำแนะนำการนำทางเท่านั้นเพื่อช่วยให้ผู้ขับขี่ไปถึงจุดหมายได้เร็วขึ้นและมั่นใจมากขึ้นโดยมีสิ่งรบกวนน้อยที่สุด
หากต้องการใช้ SDK คุณจะต้องสร้างบริการและลงทะเบียนกับ Navigation SDK สำหรับ Android เพื่อให้สามารถรับข้อมูลการนำทางใหม่แบบเรียลไทม์ (ประมาณวินาทีละครั้งระหว่างการนำทาง)
เอกสารนี้แสดงวิธีสร้างและลงทะเบียนบริการการนำทางที่ได้รับข้อมูลการนำทางจาก SDK และแสดงสถานะการนำทางไปยังอุปกรณ์ที่รับ
ภาพรวม
ส่วนนี้จะสรุปขั้นตอนระดับสูงในการเปิดใช้ฟีเจอร์แบบเลี้ยวต่อเลี้ยว
การใช้ฟีเจอร์ TurnByTurn
ขั้นตอนระดับสูงในการเปิดใช้ฟีเจอร์แบบเลี้ยวต่อเลี้ยวมีดังนี้ ส่วนต่างๆ ที่ตามมาจะให้รายละเอียดเกี่ยวกับแต่ละขั้นตอน
สร้างบริการเพื่อรับข้อมูลอัปเดตเกี่ยวกับการนำทาง
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
กำลังลงทะเบียนบริการสำหรับการอัปเดตการนำทาง
ข้อมูลโค้ดต่อไปนี้จะลงทะเบียนบริการการนำทาง
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
การเริ่มและหยุดบริการ
บริการนำทางจะทำงานอยู่ตราบใดที่ Navigation SDK ผูกกับบริการดังกล่าว คุณสามารถเรียกใช้ startService() และ stopService() ด้วยตนเองเพื่อควบคุมวงจรของบริการนำทาง แต่เมื่อลงทะเบียนบริการกับ Navigation SDK บริการจะเริ่มทำงานโดยอัตโนมัติ และจะหยุดทำงานเมื่อคุณยกเลิกการลงทะเบียนเท่านั้น คุณอาจต้องพิจารณาเริ่มบริการที่ทำงานอยู่เบื้องหน้าตามที่อธิบายไว้ในเอกสารประกอบของ Android เรื่องภาพรวมของบริการ ทั้งนี้ขึ้นอยู่กับวิธีตั้งค่าแอป
การยกเลิกการลงทะเบียนบริการ
หากต้องการหยุดรับข้อมูลอัปเดตการนำทาง ให้ยกเลิกการลงทะเบียนบริการจาก Navigation SDK
navigator.unregisterServiceForNavUpdates();
ทำความเข้าใจสถานะการนำทาง
ใช้ NavInfo.getNavState() เพื่อดูสถานะปัจจุบันของการนำทาง ซึ่งจะเป็นสถานะใดสถานะหนึ่งต่อไปนี้
ระหว่างทาง - สถานะ
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}]
สร้างไอคอนสำหรับการบังคับทิศทาง
Maneuver
enum จะกำหนดการบังคับทิศทางที่เป็นไปได้แต่ละรายการซึ่งอาจเกิดขึ้นขณะนำทาง และคุณสามารถรับการบังคับทิศทางสำหรับขั้นตอนที่กำหนดได้จากเมธอด StepInfo.getManeuver()
คุณต้องสร้างไอคอนการบังคับทิศทางและจับคู่กับคำสั่งการบังคับทิศทางที่เกี่ยวข้อง
สำหรับการบังคับทิศทางบางอย่าง คุณสามารถตั้งค่าการแมปแบบหนึ่งต่อหนึ่งกับไอคอนได้ เช่น DESTINATION_LEFT และ DESTINATION_RIGHT อย่างไรก็ตาม เนื่องจากบางการเคลื่อนที่มีความคล้ายคลึงกัน คุณจึงอาจต้องแมปการเคลื่อนที่มากกว่า 1 รายการกับไอคอนเดียว ตัวอย่างเช่น TURN_LEFT และ ON_RAMP_LEFT อาจแมปกับไอคอนเลี้ยวซ้ายทั้งคู่
การบังคับทิศทางบางอย่างมีป้ายกำกับ clockwise หรือ counterclockwise เพิ่มเติม ซึ่ง SDK จะกำหนดตามด้านที่ขับรถของประเทศนั้นๆ ตัวอย่างเช่น ในประเทศที่ขับรถทางด้านซ้ายของถนน ผู้ขับขี่จะเข้าวงเวียนหรือกลับรถในทิศทางตามเข็มนาฬิกา ส่วนประเทศที่ขับรถทางด้านขวาของถนนจะขับตามเข็มนาฬิกา Navigation SDK จะตรวจจับว่าการบังคับทิศทางเกิดขึ้นในการจราจรทางซ้ายหรือขวา และแสดงผลการบังคับทิศทางที่เหมาะสม ดังนั้น ไอคอนการบังคับทิศทางอาจแตกต่างกันสำหรับการบังคับทิศทางตามเข็มนาฬิกากับทวนเข็มนาฬิกา
ขยายเพื่อดูตัวอย่างไอคอนสำหรับการบังคับทิศทางแบบต่างๆ
| ไอคอนตัวอย่าง | การบังคับทิศทางแบบเลี้ยวต่อเลี้ยว |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_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_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
ใช้ไอคอนที่สร้างขึ้น
Navigation 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







































