即時路線資料動態饋給為裝置提供導航資訊, 專為地圖式導航導引而設計。它能根據 你提供的元素
- 圖示 (左、右、迴轉)
- CANNOT TRANSLATE
- 路名
- 到達導航步驟或終點的預估距離和所需時間 目的地
即時路況動態饋給,讓你在環遊世界中 Navigation SDK UI 不適用,例如 Android Auto 或小型範本 螢幕顯示不支援完整 Android 堆疊的情況。舉例來說, 這種方式或許用於二輪車駕駛,你可以在這裡 僅提供導覽的指引,幫助他們更快抵達目的地 盡量減少干擾
如要使用這個 SDK,您必須建立服務,並向 Android 版 Navigation SDK,以便接收新的導覽資訊 即時 (導航期間約一秒一次)。
本文件將說明如何建立並註冊 會從 SDK 接收導覽資訊,並提供導覽狀態。 接收裝置。
總覽
本節說明如何將 TurnByTurn 程式庫新增至您的專案,並 概述建構即時路線功能的高階流程。
使用 Maven 將 TurnByTurn 程式庫新增至專案 (建議做法)
如要使用獨立版本的 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() }
將以下依附元件新增至 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' }
使用下載的 JAR 檔案 (替代方法) 將 TurnByTurn 程式庫新增至專案中
TurnByTurn 程式庫會以 JAR 檔案的形式儲存在這個 SDK 資料夾中。若您沒有存取權限,請與代表聯絡。
- 下載
google_turnbyturn_*.jar
並解壓縮。 - 將下載的 JAR 檔案複製到專案的
app/libs
目錄。 將以下內容新增到
build.gradle
,以在建構中加入 JAR。dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
使用 TurnByTurn 程式庫
以下是啟用即時路線導航功能的高階啟用步驟。 下方的章節會提供每個步驟的詳細資料。
建立服務來接收導航更新資訊
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
狀態會清除導航資訊顯示的畫面,以免干擾步驟 不顯示指示
在動態消息顯示畫面中填入資料
現在您已設定即時路線查詢服務,本節將說明 可用來為 即時路線動態消息。
導覽資訊卡資訊欄位
使用者進入引導式導覽後,頂端會顯示導覽資訊卡。 包含從 Navigation 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
列舉會定義導航時可能發生的各種可能方式
可以從 StepInfo.getManeuver()
方法取得指定步驟的動畫。
您必須建立手勢圖示,並將其與相關聯的操作器配對。
以某些方式來說,您可以對圖示設定一對一對應,例如:
《DESTINATION_LEFT
》和《DESTINATION_RIGHT
》。不過,由於一些做法
因此,您可能會想將多個標記對應到單一圖示。適用對象
範例 TURN_LEFT
和 ON_RAMP_LEFT
都能對應到左轉圖示。
某些操作可能包含額外的 clockwise
或 counterclockwise
標籤,
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
|
使用產生的圖示
為協助 Android Auto 用途, Navigation SDK 支援產生車道和車道 引導圖示。這些圖示符合 Android Auto 的圖片大小指南 車輛應用程式程式庫 (建議指定 500 x 74 dp 的定界框)。詳情請見 setsLaneImage 和 CarIcon 。
圖示產生範例
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 應用程式: