啟用即時路線導航資料動態饋給

即時路線資料動態饋給為裝置提供導航資訊, 專為地圖式導航導引而設計。它能根據 你提供的元素

  • 圖示 (左、右、迴轉)
  • CANNOT TRANSLATE
  • 路名
  • 到達導航步驟或終點的預估距離和所需時間 目的地

即時路況動態饋給,讓你在環遊世界中 Navigation SDK UI 不適用,例如 Android Auto 或小型範本 螢幕顯示不支援完整 Android 堆疊的情況。舉例來說, 這種方式或許用於二輪車駕駛,你可以在這裡 僅提供導覽的指引,幫助他們更快抵達目的地 盡量減少干擾

如要使用這個 SDK,您必須建立服務,並向 Android 版 Navigation SDK,以便接收新的導覽資訊 即時 (導航期間約一秒一次)。

本文件將說明如何建立並註冊 會從 SDK 接收導覽資訊,並提供導覽狀態。 接收裝置。

總覽

本節說明如何將 TurnByTurn 程式庫新增至您的專案,並 概述建構即時路線功能的高階流程。

如要使用獨立版本的 TurnByTurn 程式庫,請按照下列步驟操作:

  1. 設定環境以存取主機 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()
    }
        
  2. 將以下依附元件新增至 Maven 或 Gradle 設定:
  3. 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'
    }
        

使用下載的 JAR 檔案 (替代方法) 將 TurnByTurn 程式庫新增至專案中

TurnByTurn 程式庫會以 JAR 檔案的形式儲存在這個 SDK 資料夾中。若您沒有存取權限,請與代表聯絡。

  1. 下載 google_turnbyturn_*.jar 並解壓縮。
  2. 將下載的 JAR 檔案複製到專案的 app/libs 目錄。
  3. 將以下內容新增到 build.gradle,以在建構中加入 JAR。

    dependencies {
       ...
       api fileTree(include: ['*.jar'], dir: 'libs')
    }
    

使用 TurnByTurn 程式庫

以下是啟用即時路線導航功能的高階啟用步驟。 下方的章節會提供每個步驟的詳細資料。

  1. 建立服務以接收導航更新內容

  2. 註冊服務

  3. 瞭解導覽狀態

  4. 查看顯示重要元素的導覽顯示範例

建立服務來接收導航更新資訊

Navigation SDK 會繫結至 TurnByTurn 服務以及 透過 Android 安裝 API 傳訊工具 ,直接在 Google Cloud 控制台實際操作。您可以為這些更新內容建立新的導航服務,或使用現有的 課程中也會快速介紹 Memorystore 這是 Google Cloud 的全代管 Redis 服務

使用服務接收導航更新的好處是 可以獨立於獨立的背景處理程序中運作

下例中的服務會接收導航資訊,並使用 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 時,您的服務會自動啟動,並 只有在取消註冊時才會停止視應用程式的設定方式而定,您可以: 考慮啟動前景服務 說明文件服務 總覽頁面

取消註冊服務

如要停止接收導航更新,請在下列位置取消註冊服務: Navigation SDK。

navigator.unregisterServiceForNavUpdates();

瞭解導覽狀態

使用 NavInfo.getNavState() 取得導航目前的狀態 (此為一種) 下列項目:

  • Enroute - ENROUTE 狀態表示引導式導航目前狀態 運作,且使用者位於指定路線上。目前相關資訊 即將提供後續的操縱步驟

  • Rerouting - REROUTING 表示導航正在進行中,但 導航工具正在尋找新的路線。不會進行接下來的操縱步驟 ,因為目前沒有任何新路線。在範例應用程式中,顯示「Rerouting...」文字。訊息出現於 導覽資訊隨即顯示找到路線後,會顯示 NavInfo 訊息 狀態是 ENROUTE

  • 已停止 - STOPPED 表示導航已結束。例如導覽 當使用者結束應用程式的導航時,停止停留。在範例應用程式中, STOPPED 狀態會清除導航資訊顯示的畫面,以免干擾步驟 不顯示指示

在動態消息顯示畫面中填入資料

現在您已設定即時路線查詢服務,本節將說明 可用來為 即時路線動態消息。

行動裝置螢幕顯示即將在 100 英尺後向 W Ahwanee 前進
答:畫面底部還剩 46 分鐘
剩餘距離為 39
英里。

使用者進入引導式導覽後,頂端會顯示導覽資訊卡。 包含從 Navigation SDK。相關圖片範例是 這些重要的導覽元素

下表列出導覽資訊的欄位和欄位位置。

每個導覽步驟的欄位 整趟行程的欄位
在「StepInfo」中發現 在「NavInfo」中發現
完整道路名稱 剩餘時間
動畫圖示 與目的地的距離
到下一個步驟的距離
車道指引欄位

車道指引

Navigation SDK 代表導航中的車道 將卡片設為 小丑LaneDirection 資料物件Lane 物件代表導航和導航期間的特定車道 LaneDirection 物件清單,描述所有可以轉彎的轉彎處 由這個車道繪製而成

車道指引範例
此外還會從 0 自動調整資源配置
您完全不必調整資源調度設定

使用者建議在車道上行駛的方向, isRecommended ] 欄位。

車道指引範例

下列程式碼片段說明顯示的車道資料 。

// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
                  {/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]

// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]

建立操作圖示

Maneuver敬上 列舉會定義導航時可能發生的各種可能方式 可以從 StepInfo.getManeuver() 方法取得指定步驟的動畫。

您必須建立手勢圖示,並將其與相關聯的操作器配對。 以某些方式來說,您可以對圖示設定一對一對應,例如: 《DESTINATION_LEFT》和《DESTINATION_RIGHT》。不過,由於一些做法 因此,您可能會想將多個標記對應到單一圖示。適用對象 範例 TURN_LEFTON_RAMP_LEFT 都能對應到左轉圖示。

某些操作可能包含額外的 clockwisecounterclockwise 標籤, SDK 會根據國家/地區的推動因素決定相應結果。例如,在 行駛於道路左側時,駕駛會經過 順時針方向迴轉或迴轉,路面右側則 不同國家/地區以順時針方向運作Navigation SDK 偵測到 操控方式是否發生在左或右側流量,並輸出 採取適當處理措施因此,您的插圖圖示可能與 依順時針與逆時針配置。

展開即可查看不同方式的圖示範例

「範例」圖示 轉彎手術
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

使用產生的圖示

由 Navigation 產生的圖示小清單
將機器學習工作流程自動化

為協助 Android Auto 用途, Navigation SDK 支援產生車道和車道 引導圖示。這些圖示符合 Android Auto 的圖片大小指南 車輛應用程式程式庫 (建議指定 500 x 74 dp 的定界框)。詳情請見 setsLaneImageCarIcon

圖示產生範例

NavigationUpdatesOptions options =
  NavigationUpdatesOptions.builder()
             .setNumNextStepsToPreview(numNextStepsToPreview)
             .setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
             .setDisplayMetrics(getResources().getDisplayMetrics())
             .build();
boolean isRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(),
              NavInfoReceivingService.class.getName(),
              options);

啟用圖示產生功能後,TurnbyTurn StepInfo 物件就會填入 含有圖示的 maneuverBitmaplanesBitmap 欄位。

後續步驟