ฟีดข้อมูลแบบเลี้ยวต่อเลี้ยวจะให้ข้อมูลการนำทางเท่านั้นแก่อุปกรณ์ ซึ่งออกแบบมาเพื่อนำทางโดยใช้แผนที่ โดยจะมีการคัฟเวอร์ที่กำลังจะมาถึงด้วย องค์ประกอบที่คุณระบุ:
- ไอคอน (ซ้าย ขวา กลับรถ)
- หมุนหมายเลขในวงเวียน
- ชื่อถนน
- ระยะทางและเวลาโดยประมาณไปยังขั้นตอนการนำทางถัดไปหรือขั้นตอนสุดท้าย ปลายทาง
คุณสามารถใช้ฟีดแบบเลี้ยวต่อเลี้ยวเพื่อสร้างประสบการณ์ UI ของ SDK การนำทางไม่เหมาะสม เช่น สำหรับ Android Auto หรือสำหรับขนาดเล็ก หน้าจอจะแสดงเมื่อไม่พร้อมใช้งานสแต็ก Android เต็มรูปแบบ ตัวอย่างเช่น คุณสามารถ ก็อาจใช้รูปนี้สำหรับคนขับรถสองล้อ ซึ่งคุณสามารถฉายภาพ คำแนะนำแบบไปยังส่วนต่างๆ เท่านั้นเพื่อช่วยให้ไปถึงจุดหมายได้เร็วขึ้นและอีกมากมาย ได้อย่างมั่นใจและมีสิ่งรบกวนให้น้อยที่สุด
ในการใช้ SDK คุณจะต้องสร้างบริการและลงทะเบียนกับ Navigation SDK สำหรับ Android เพื่อให้รับข้อมูลการนำทางใหม่ได้ แบบเรียลไทม์ (ประมาณวินาทีละครั้งในระหว่างนำทาง)
เอกสารนี้แสดงวิธีสร้างและลงทะเบียนบริการนำทาง รับข้อมูลการไปยังส่วนต่างๆ จาก SDK และระบุสถานะการนำทาง ไปยังอุปกรณ์ที่เป็นผู้รับ
ภาพรวม
ส่วนนี้จะอธิบายวิธีเพิ่มไลบรารี TurnByTurn ลงในโปรเจ็กต์และ สรุปขั้นตอนระดับสูงสำหรับการสร้างฟังก์ชันแบบเลี้ยวต่อเลี้ยว
เพิ่มไลบรารี TurnByTurn ลงในโปรเจ็กต์โดยใช้ Maven (แนะนำ)
หากต้องการใช้ไลบรารี TurnByTurn เวอร์ชันสแตนด์อโลน ให้ทำตามขั้นตอนต่อไปนี้
- ตั้งค่าสภาพแวดล้อมเพื่อเข้าถึงที่เก็บของโฮสต์ Maven ดังนี้
Maven
เพิ่มโค้ดต่อไปนี้ในไฟล์
pom.xml
<project> ... <repositories> <repository> <id>google-maven-repository</id> <url>https://maven.google.com</url> </repository> </repositories> ... </project>
Gradle
เพิ่มโค้ดต่อไปนี้ในไฟล์
build.gradle
repositories { ... google() }
เพิ่มทรัพยากร 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
ขั้นตอนระดับสูงสำหรับการเปิดการใช้งานฟังก์ชันแบบเลี้ยวต่อเลี้ยวมีดังนี้ ส่วนต่อไปจะให้รายละเอียดเกี่ยวกับแต่ละขั้นตอน
สร้างบริการเพื่อรับข้อมูลอัปเดตการนำทาง
Navigation SDK จะเชื่อมโยงกับบริการ TurnByTurn ของคุณและ ส่งการอัปเดตการนำทางผ่าน เมสเซนเจอร์ ที่ใช้เวลาเพียง 2 นาที คุณสามารถสร้างบริการนำทางใหม่สำหรับการอัปเดตเหล่านี้ หรือใช้บริการ service.
ข้อดีของการใช้บริการเพื่อรับการอัปเดตการนำทางคือบริการ สามารถอาศัยอยู่ในกระบวนการเบื้องหลังที่แยกจากกันได้
บริการในตัวอย่างต่อไปนี้ได้รับข้อมูลการนำทางและการใช้งาน
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);
การเริ่มและการหยุดบริการ
บริการนำทางจะทำงานตราบใดที่
SDK การนำทางจะเชื่อมโยงกับ SDK ดังกล่าว คุณสามารถโทรด้วยตนเอง
startService()
และ stopService()
เพื่อควบคุมอายุการใช้งานของบริการการนำทาง
แต่เมื่อคุณลงทะเบียนบริการกับ
การไปยังส่วนต่างๆ ด้วย SDK บริการของคุณจะเริ่มต้นโดยอัตโนมัติ และ
จะหยุดทำงานเมื่อคุณยกเลิกการลงทะเบียนเท่านั้น โดยคุณอาจดำเนินการดังนี้ ทั้งนี้ขึ้นอยู่กับวิธีตั้งค่าแอป
ต้องการลองเริ่มบริการที่ทำงานอยู่เบื้องหน้าตามที่อธิบายไว้ใน
เอกสารประกอบ บริการ
ภาพรวม
การยกเลิกการลงทะเบียนบริการ
หากต้องการหยุดรับการอัปเดตการนำทาง ให้ยกเลิกการลงทะเบียนบริการจาก SDK การนำทาง
navigator.unregisterServiceForNavUpdates();
ทำความเข้าใจสถานะการนำทาง
ใช้ NavInfo.getNavState()
เพื่อดูสถานะปัจจุบันของการนำทาง ซึ่งก็คือ 1
ดังต่อไปนี้
เปลี่ยนเส้นทาง - สถานะ
ENROUTE
หมายความว่าขณะนี้ระบบนำทางแบบมีคำแนะนำอยู่ ทำงานอยู่และผู้ใช้อยู่บนเส้นทางที่ระบุ ข้อมูลเกี่ยวกับสถานการณ์ปัจจุบัน มีขั้นตอนการปรับเปลี่ยนที่กำลังจะเกิดขึ้นกำลังเปลี่ยนเส้นทาง -
REROUTING
หมายความว่าการนำทางกำลังอยู่ระหว่างดำเนินการ แต่ ตัวนำทางกำลังมองหาเส้นทางใหม่ ขั้นตอนการเคลื่อนที่ที่กำลังจะมาถึงไม่ได้ พร้อมใช้งาน เนื่องจากยังไม่มีเส้นทางใหม่ ในแอปตัวอย่าง สัญลักษณ์ "กำลังเปลี่ยนเส้นทาง..." ข้อความปรากฏใน หน้าจอข้อมูลการนำทาง เมื่อพบเส้นทาง ข้อความNavInfo
จะ ที่ส่งไปกับรัฐENROUTE
หยุดแล้ว -
STOPPED
หมายความว่าการนำทางสิ้นสุดแล้ว ตัวอย่างเช่น การนำทาง หยุดเมื่อผู้ใช้ออกจากการนำทางในแอป ในแอปตัวอย่าง สถานะSTOPPED
ล้างการแสดงข้อมูลการนำทางเพื่อไม่ให้ค้างขั้นตอน แสดงวิธีการ
ป้อนข้อมูลเพื่อแสดงฟีด
เมื่อตั้งค่าบริการแบบเลี้ยวต่อเลี้ยวแล้ว ส่วนนี้จะครอบคลุม องค์ประกอบภาพและข้อความที่คุณสามารถใช้เพื่อป้อนข้อมูลการ์ดคำแนะนำสำหรับ ฟีดแบบเลี้ยวต่อเลี้ยว
ช่องข้อมูลการ์ดการนำทาง
เมื่อผู้ใช้เข้าสู่การนำทางที่มีคำแนะนำ การ์ดการนำทางจะปรากฏที่ด้านบน ที่มีข้อมูลการนำทางที่สร้างจาก SDK การนำทาง รูปภาพที่เกี่ยวข้องแสดงตัวอย่าง องค์ประกอบการนำทางที่สำคัญเหล่านี้
ตารางนี้แสดงช่องสำหรับข้อมูลการนำทางและตำแหน่งที่จะพบช่อง
ช่องสำหรับการนำทางแต่ละขั้นตอน | ช่องสำหรับการเดินทางโดยรวม |
---|---|
พบใน StepInfo |
พบใน NavInfo |
ชื่อเต็มของถนน | เวลาที่เหลือ |
ไอคอนการเคลื่อนย้าย | ระยะทางไปยังจุดหมาย |
ระยะทางไปยังขั้นตอนถัดไป | |
ช่องคำแนะนำช่องทาง |
คำแนะนำช่องทาง
Navigation SDK แสดงช่องทางในการนำทาง
เปลี่ยนบัตรเป็น
เลน
และ
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 ตรวจพบ
การเคลื่อนที่เกิดขึ้นในการจราจร
ฝั่งซ้ายหรือขวา และเอาต์พุต
วิธีการที่เหมาะสม ดังนั้น ไอคอนการเคลื่อนย้ายของคุณอาจแตกต่างจาก
ตามเข็มนาฬิกากับวิธีทวนเข็มนาฬิกา
ขยายเพื่อดูตัวอย่างไอคอนสำหรับวิธีการดำเนินการต่างๆ
ไอคอนตัวอย่าง | กระบวนการ 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
|
ใช้ไอคอนที่สร้างขึ้น
เพื่อสนับสนุนกรณีการใช้งานของ Android Auto Navigation SDK สนับสนุนการสร้างการขับและเลน ไอคอนคำแนะนำ ไอคอนเหล่านี้ตรงตามหลักเกณฑ์การปรับขนาดรูปภาพของ 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