บทนำ
Navigation SDK (Nav SDK) มีฟีเจอร์การนำทางแบบเลี้ยวต่อเลี้ยวที่ดีที่สุด ซึ่งอาจเป็นประโยชน์อย่างยิ่งต่อลูกค้าและคนขับ โดยเฉพาะคนขับใหม่หรือคนขับที่ไม่คุ้นเคยกับภูมิภาค อย่างไรก็ตาม มีกรณีการใช้งานเฉพาะที่บริษัทไม่ต้องการดึงความสนใจของผู้ขับออกจากท้องถนนด้วย UI การนำทางแบบเลี้ยวต่อเลี้ยว แต่ยังต้องการติดตามตำแหน่งของยานพาหนะและฟังเหตุการณ์ที่เกี่ยวข้องกับเส้นทางที่ผู้ขับขี่กำลังขับตาม ตัวอย่างเช่น คนขับรถบรรทุก โดยเฉพาะอย่างยิ่งหากขนส่งวัตถุอันตราย บริษัทอื่นๆ ที่ทำการนำส่งโดยใช้รูปแบบการเดินทางที่แตกต่างกัน เช่น การเดินในระยะทางสั้นๆ อาจไม่จำเป็นต้องเปิดใช้การนำทางแบบเลี้ยวต่อเลี้ยวเช่นกัน ซึ่งจะช่วยประหยัดแบตเตอรี่ของอุปกรณ์
ขอบเขต
เอกสารนี้อธิบายวิธีที่บริษัทสามารถซ่อนแผนที่การนำทาง (มุมมอง) จาก Nav SDK และยังคงได้รับประโยชน์จากฟีเจอร์ทั้งหมดของ Nav SDK ในเรื่องการติดตามตำแหน่ง การสมัครรับข้อมูลเหตุการณ์ และการเรียกกลับ ข้อมูลที่รวบรวมจาก Nav SDK ในโหมดไม่มีส่วนหัวสามารถใช้เพื่อปรับปรุงความสามารถในการติดตามยานพาหนะและทำความเข้าใจเวลาที่คาดว่าจะถึง (ETA) ได้อย่างแม่นยำยิ่งขึ้น ซึ่งจะนำไปสู่ความโปร่งใสและประสิทธิภาพในท้ายที่สุด
Navigation SDK
Navigation SDK เป็นไลบรารี Android / iOS ดั้งเดิมที่เพิ่มลงในแอปคนขับ ในบริบทของการเดินทาง SDK นี้มีหน้าที่รับผิดชอบในเรื่องต่อไปนี้
- การรับตำแหน่งที่สแนปกับถนนจากแอปที่เรียกใช้ ตำแหน่งที่สแนปกับถนนจะแม่นยำกว่า FusedLocationProvider (FLP) ของ Android เนื่องจากใช้เครือข่ายถนนของ Google เพื่อสแนปตำแหน่งกับส่วนของถนนที่ใกล้ที่สุด ซึ่งจะทำให้เวลาถึงโดยประมาณและข้อมูลอื่นๆ จาก FLP แม่นยำยิ่งขึ้น
- ประสบการณ์การนำทางแบบเลี้ยวต่อเลี้ยวที่ช่วยให้ผู้ขับขี่เดินทางจากจุด ก. ไปยังจุด ข. ได้อย่างมีประสิทธิภาพ โดยคำนึงถึงสภาพการจราจรแบบเรียลไทม์และข้อจำกัดอื่นๆ ของเส้นทาง
- ทริกเกอร์เหตุการณ์ตามความคืบหน้าของเส้นทาง ตำแหน่ง ความเร็ว ฯลฯ ผ่าน Listener เหตุการณ์และ Callback ที่ลงทะเบียน
ประสบการณ์ใช้งานเริ่มต้น
เมื่อลูกค้าใช้งาน Nav SDK ระบบจะถือว่าลูกค้าต้องการฟีเจอร์การนำทางแบบเลี้ยวต่อเลี้ยว ด้วยเหตุนี้ เอกสารประกอบของ Nav SDK (Android และ iOS) จึงมีวิธีการติดตั้งใช้งาน Nav SDK โดยเปิดใช้การนำทางแบบเลี้ยวต่อเลี้ยว
ใน Android การแสดงผลแผนที่แบบเลี้ยวต่อเลี้ยวในแอปจะทำได้โดยใช้ SupportNavigationFragment หรือ NavigationView ส่วนใน iOS จะใช้ GMSMapView องค์ประกอบ UI เหล่านี้จะเพิ่มแผนที่แบบอินเทอร์แอกทีฟและ UI การนำทางแบบเลี้ยวต่อเลี้ยวลงในแอป
ในส่วนถัดไป เราจะเปรียบเทียบโค้ด Nav SDK เริ่มต้นที่เปิดใช้การนำทางแบบเลี้ยวต่อเลี้ยวกับโค้ด Nav SDK แบบไม่มีส่วนหัวสำหรับทั้ง Android และ iOS โดยเน้นการเปลี่ยนแปลงที่จำเป็น
โซลูชัน
Android
ใน Android โค้ดนี้คือโค้ด Java ที่มาพร้อมกับแอปตัวอย่าง Nav SDK
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
setContentView(R.layout.activity_nav_fragment);
mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
ดังที่เห็น จุดมุมมองชี้ไปยังเลย์เอาต์ที่ควรใช้ในการวาดประสบการณ์การนำทาง และในกรณีนี้ ระบบจะสร้าง SupportNavigationFragment แทน NavigationView
หากต้องการให้ Nav SDK เริ่มทำงานในโหมด Headless เราเพียงต้องนำคำสั่ง 2 รายการดังกล่าวออก หากต้องการสลับระหว่างโหมด Headless กับโหมดที่ไม่ใช่ Headless (การนำทางที่ใช้งานอยู่) คุณสามารถใช้ตัวแปรเพื่อกำหนดว่าจะต้องใช้โหมด Headless หรือไม่ เช่น
Boolean mHeadless = true;
จากนั้นคุณจะใช้ได้ในภายหลัง เช่น
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
if(!mHeadless) {
setContentView(R.layout.activity_nav_fragment);
mNavFragment =
(SupportNavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
}
ตัวแปร mHeadless
สามารถลิงก์กับคอมโพเนนต์ UI (เช่น ปุ่มเปิด/ปิด) ที่จะเปิดหรือปิดใช้แบบไม่มีส่วนหัวตามนั้น
![]() |
![]() |
Nav SDK ทำงานโดยมีการนำทางที่ใช้งานอยู่ (ปิดแบบไม่มีส่วนหัว) | แอปเดียวกัน แต่ตอนนี้มี Nav SDK ที่ทำงานในโหมดไม่มีส่วนหัว |
ดังที่เห็นในตัวอย่างทางด้านขวาด้านบน การนำทางของ Nav SDK ทำงานอยู่เบื้องหลัง แต่ระบบจะปิดใช้ประสบการณ์การนำทางแบบเลี้ยวต่อเลี้ยว
iOS
ใน iOS คุณสามารถใช้โหมดไม่มีส่วนหัวได้อย่างง่ายดายโดยเพิ่มการตั้งค่าต่อไปนี้ในระหว่างการเริ่มต้น MapView \
mapView.isHidden = true
ตัวอย่างเช่น
/// The main map view.
private lazy var mapView: GMSMapView = {
let mapView = GMSMapView(frame: .zero)
mapView.isHidden = true /// Make it headless!
mapView.isNavigationEnabled = true
mapView.settings.compassButton = true
mapView.delegate = self
return mapView
}()
ดูว่าจะเป็นอย่างไร - หน้าจอจะขึ้นอยู่กับวิธีที่ใช้ UI และภาพหน้าจอเป็นเพียงภาพประกอบเพื่อแสดงผลของการซ่อน mapView:
![]() |
![]() |
การนำทางที่ใช้งานอยู่ซึ่งทำงานบน
ตัวอย่างแอป iOS |
แอปเดียวกันในโหมดไม่มีส่วนหัว |
ข้อควรพิจารณาในการติดตั้งใช้งาน
เนื่องจากโหมดไม่มีส่วนหัวไม่ได้ซ่อนแผนที่นำทางจากหน้าจอ จึงจะบันทึกเฉพาะเวลาหน้าจอ ซึ่งจะช่วยให้แบตเตอรี่ของอุปกรณ์ใช้งานได้นานขึ้น อย่างไรก็ตาม เนื่องจาก Nav SDK จะทำงานต่อไป การอัปเดตตำแหน่งและการเรียกกลับของเหตุการณ์ทั้งหมดจะทริกเกอร์ตามปกติ ดังนั้นการใช้การกำหนดค่านี้จึงไม่มีผลข้างเคียง
บทสรุป
เอกสารนี้แสดงให้เห็นความยืดหยุ่นของ Nav SDK และสิ่งที่เราทำได้ในระบบปฏิบัติการต่างๆ เมื่อพิจารณาถึงข้อจำกัดของระบบปฏิบัติการเหล่านั้น นอกจากนี้ ยังช่วยให้ลูกค้าปรับแต่งประสบการณ์การขับขี่เพื่อหลีกเลี่ยงสิ่งรบกวนและปรับปรุงความปลอดภัยได้ด้วย
แหล่งข้อมูลเพิ่มเติม
หากต้องปิดใช้การแจ้งเตือนระหว่างการนำทางเนื่องจากเหตุผลที่กล่าวมาข้างต้น คุณก็ทำได้เช่นกัน โปรดดูแก้ไขการแจ้งเตือนแบบเลี้ยวต่อเลี้ยวใน Nav SDK