選取平台: Android iOS

設定即時服務中斷

即時中斷是一組功能,可提醒使用者路線上的中斷情形,並讓使用者回報及驗證遇到的中斷情形。干擾因素包括車禍、交通壅塞、警察和固定式測速照相機、施工、車道封閉和特定天氣狀況。本頁說明即時路況中斷功能及其設定選項,包括使用自訂導航 UI 的應用程式注意事項。

即時異動功能

Navigation SDK 包含下列即時中斷功能,是核心導航體驗的一部分:

這些功能可供設定,且預設為啟用。下列各節將進一步說明功能和可用的設定選項。

沿途的互動式交通異動摘要

應用程式顯示路線時 (無論是在路線總覽或導航期間),任何目前的中斷事件都會以摘要說明形式顯示在路線上。啟用車流量圖層後,地圖也會顯示路線外的交通中斷情況。摘要包含圖示,指出服務中斷類型。

沿途摘要

您可以使用 setTrafficPromptsEnabled 控制沿途中斷摘要的顯示,這也會控制使用者接近中斷點時自動顯示快訊。

// Using the SupportNavigationFragment
mNavFragment.setTrafficPromptsEnabled(true);

// Using the NavigationView
navigationView.setTrafficPromptsEnabled(true);

在使用者輕觸摘要時顯示中斷詳情

輕觸服務中斷摘要,即可開啟資訊卡查看詳細資料。這項設定適用於路線上和路線外的摘要,但只有在啟用路況圖層時,才會顯示路線外的摘要。資訊卡會顯示中斷類型、上次回報時間,有時還會提供投票選項,讓你指出中斷情形是否仍存在。資訊卡類型和設定選項會因使用者是否處於導航模式而異。

在開始導航前,路線總覽上顯示的摘要資訊卡

開始導航前,使用者可以輕觸地圖或路線總覽上的路線內或路線外摘要,開啟資訊卡。必須啟用車流量圖層,才能顯示路線外標示。資訊卡會提供更多服務中斷詳情。

總覽資訊卡

您可以使用 setTrafficIncidentCardsEnabled,控制使用者是否能在路線總覽中輕觸交通中斷摘要,查看更多資訊。

// Using the SupportNavigationFragment
mNavFragment.setTrafficIncidentCardsEnabled(true);

// Using the NavigationView
navigationView.setTrafficIncidentCardsEnabled(true);

導航期間的摘要資訊卡

在導航期間,使用者可以輕觸路線上或路線外的中斷摘要,開啟資訊卡。資訊卡會顯示中斷類型和上次回報時間,並提供按鈕讓使用者投票,表示中斷情形是否仍存在。

使用者可對 5 公里內路線上和路線外的路況中斷事件投票,但道路封閉事件除外。Google 會處理這些投票,判斷是否要繼續顯示服務中斷資訊。其他 Google 地圖和 Navigation SDK 使用者也可能在地圖上看到投票結果。

導航進行中資訊卡

您可以使用 setTrafficPromptsEnabled,控制導航期間是否顯示中斷標示,以及是否可輕觸,這項設定也會控制沿路線顯示的標示,以及使用者接近中斷點時顯示的自動快訊。

// Using the SupportNavigationFragment
mNavFragment.setTrafficPromptsEnabled(true);

// Using the NavigationView
navigationView.setTrafficPromptsEnabled(true);

導航期間自動顯示交通異動快訊,並提供投票功能

在導航期間,當使用者接近路線上的中斷點時,系統會顯示提示,提供中斷點的相關資訊,並顯示按鈕,讓使用者投票決定中斷點是否仍存在。使用者提交的投票會由 Google 處理,並可能顯示在地圖上,供其他 Google 地圖和 Navigation SDK 使用者查看,以及用於判斷是否要繼續顯示中斷情形。

導航進行中資訊卡

您可以使用 setTrafficPromptsEnabled 設定導航期間是否顯示快訊提示,這項設定也會控制是否顯示沿路摘要。

// Using the SupportNavigationFragment
mNavFragment.setTrafficPromptsEnabled(true);

// Using the NavigationView
navigationView.setTrafficPromptsEnabled(true);

在導航期間回報交通異動

在操作模式下,導航 UI 會顯示一個按鈕,讓使用者回報路線上的新路況。使用者輕觸按鈕後,系統會顯示選單,列出可回報的干擾類型。 使用者提交的回報內容會由 Google 處理,並可能顯示在地圖上,供其他 Google 地圖和 Navigation SDK 使用者查看。

回報道路封閉後,系統可能會提供替代路線,繞過封閉路段,並提示使用者確認或拒絕重新規劃路線。這項功能視供應情形而定。

「回報」按鈕 報表選單

顯示或隱藏標準報表按鈕

您可以使用 setReportIncidentButtonEnabled 設定導航期間標準回報按鈕的顯示設定。

// Enables the incident reporting button to show in situations where incident
// reporting is possible.

// Using the SupportNavigationFragment
mNavFragment.setReportIncidentButtonEnabled(true);

// Using the NavigationView
navigationView.setReportIncidentButtonEnabled(true);

新增自訂報表按鈕

您可以在導航 UI 中新增自訂回報按鈕,取代標準路況回報按鈕。使用者點按自訂按鈕時,您可以呼叫 showReportIncidentsPanel 方法,觸發檢舉選單。新增自訂回報按鈕前,請先呼叫 isIncidentReportingAvailable,確認應用程式處於導航模式,且使用者位於支援回報功能的國家/地區。如果上述任一條件不成立,就不會顯示檢舉選單。

  Button customReportIncidentButton = findViewById(R.id.custom_reporting_button);
  
  // Check if reporting is available before displaying your button
  customReportIncidentButton.setVisibility(
      navigationView.isReportingAvailable ? View.VISIBLE : View.GONE);
  
  // Trigger the reporting flow if the button is clicked
  customReportIncidentButton.setOnClickListener(v ->
      navigationView.showReportIncidentsPanel());
  

使用自訂導覽 UI

如果 Navigation SDK 實作項目包含自訂 UI 元素,請務必考量即時中斷元素,以免發生衝突。

回報按鈕位置

根據預設,中斷回報按鈕位於地圖的底部/結尾角落,如果是從左到右的語言,則位於右側;如果是從右到左的語言,則位於左側。如需移動檢舉按鈕,騰出空間給自訂 UI 元素,請新增 BOTTOM_END_BELOW 或 FOOTER 自訂控制項,將按鈕位置往上推。將自訂 UI 放在自訂控制項中,也能確保 Navigation SDK 顯示的任何提示,都會正確疊加在自訂 UI 元素上。如果無法使用自訂控制項,請使用 Prompt Visibility API 管理潛在的 UI 衝突。

Prompt Visibility API (實驗版)

Prompt Visibility API 可協助您避免 Navigation SDK 產生的 UI 元素與自訂 UI 元素發生衝突。方法是新增事件監聽器,在 Navigation SDK UI 元素即將顯示之前,以及元素移除後,接收回呼。您可以接收即時中斷元素的事件回呼,包括資訊卡、提示和中斷回報選單,以及 Navigation SDK 產生的其他通知。
// Sample listener
val listener: PromptVisibilityChangedListener = { isVisible ->
	if (isVisible) {
		customFab.visibility = false
		customFooter.visibility = false
		moveSomeOtherThingsAround()
	} else {
		customFab.visibility = true
		customFooter.visibility = true
		moveSomeThingsBackToWhereTheyWereBefore()
	}
}

// Inside onCreate()
navigationView.addPromptVisibilityChangedListener(listener)

// Inside onDestroy()
navigationView.removePromptVisibilityChangedListener(listener)