簡介
Navigation SDK (Nav SDK) 提供一流的導航功能,可為顧客和駕駛人提供很大的幫助,尤其是新駕駛人或不熟悉該區域的駕駛人。不過,在特定用途中,公司不希望逐向導航 UI 分散駕駛人的注意力,但仍想追蹤車輛位置,並監聽與行駛路線相關的事件。例如卡車司機 (尤其是運輸危險物質者),如果其他公司使用不同模式 (例如步行短距離) 進行外送,可能也不需要啟用逐向導航,這樣就能延長裝置的電池續航力。
範圍
本文說明公司如何從 Nav SDK 隱藏導航地圖 (檢視畫面),同時仍可享有 Nav SDK 的所有功能,包括位置追蹤、事件訂閱和回呼。從無頭模式的 Navigation SDK 擷取的資料,可用於提升車輛追蹤能力,並更準確地瞭解預計抵達時間,最終達到透明化和效率。
Navigation SDK
Navigation SDK 是原生 Android / iOS 程式庫,會新增至駕駛人應用程式。在行動裝置的環境中,這項 SDK 負責:
- 從執行該應用程式取得道路對應位置。與 Android 的 FusedLocationProvider (FLP) 相比,路徑對應位置資訊更精確,因為這項功能會使用 Google 的道路網路,將位置資訊對應至最近的路段,因此 FLP 的預計抵達時間和其他資訊會更加準確。
- 提供詳細的導航資訊,讓駕駛人能考量即時交通狀況和其他路線限制,有效率地從 A 點抵達 B 點。
- 透過事件監聽器和已註冊的回呼,根據路線進度、位置、速度等觸發事件。
預設版本
客戶導入 Navigation SDK 時,系統會假設他們需要逐步導航功能。因此,Navigation SDK 的說明文件 (Android 和 iOS) 提供相關操作說明,協助您實作 Navigation SDK 並啟用逐步導航功能。
在 Android 上,應用程式會使用 SupportNavigationFragment 或 NavigationView 算繪行車路線地圖,而 iOS 則使用 GMSMapView。這些 UI 元素會在應用程式中加入互動式地圖和即時路線指示 UI。
在下一節中,我們會比較 Android 和 iOS 的預設 Nav SDK (已啟用逐步導航程式碼) 與無頭 Nav SDK 程式碼,並醒目顯示必要變更。
解決方案
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 以無頭模式啟動,只要移除這兩項指令即可。如果想在無頭和非無頭 (有效導覽) 之間切換,可以使用變數判斷是否必須使用無頭,例如:
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 以無頭模式執行 |
如上圖右側範例所示,導航 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 範例應用程式 |
無頭模式下的相同應用程式 |
導入注意事項
無螢幕模式只是將導航地圖從螢幕上隱藏,因此只會節省螢幕時間,進而延長裝置的電池續航力。不過,由於 Navigation SDK 會繼續執行,因此位置資訊更新和所有事件回呼都會正常觸發,使用這項設定不會產生副作用。
結論
本文將說明 Nav SDK 的彈性,以及在不同作業系統的限制下,我們可以達成哪些目標。顧客也能自訂駕駛體驗,避免分心並提升安全性。
其他資源
如果基於上述原因,必須在導航期間停用通知,也可以達成此目的,請參閱「在 Nav SDK 中修改即時路線導航通知」。