ターンバイターン方式のデータフィードは、地図ベースのナビゲーション ガイダンス用に設計されていないデバイスに、ナビゲーションのみの情報を提供します。次の要素を使用して今後の操作を提供します。
- アイコン(左、右、U ターン)
- ロータリーで番号を曲がる
- 道路名
- 次のナビゲーションステップや最終目的地までの推定距離と時間
ターンバイターン フィードを使用すると、完全な Navigation SDK UI が適さないエクスペリエンスを作成できます。たとえば、Android Auto や、完全な Android スタックを利用できない小さな画面ディスプレイなどに使用できます。たとえば、二輪車のライダーにこれを使用すると、ナビゲーションのみの案内を投影して、気を散らすことなくすばやく自信を持って目的地にたどり着けるようにできます。
SDK を使用するには、サービスを作成して Navigation SDK for Android に登録し、新しいナビゲーション情報をリアルタイムで(ナビゲーション中に 1 秒に 1 回程度)受信できるようにします。
このドキュメントでは、SDK からナビゲーション情報を受け取り、受信デバイスにナビゲーション状態を提供するナビゲーション サービスを作成して登録する方法について説明します。
概要
このセクションでは、TurnByTurn ライブラリをプロジェクトに追加する方法と、ターンバイターン機能を構築するための大まかなフローの概要について説明します。
Maven を使用して TurnByTurn ライブラリをプロジェクトに追加する(推奨)
TurnByTurn ライブラリのスタンドアロン バージョンを使用する手順は次のとおりです。
Trip and Order Documentation の Driver SDK スタートガイドの説明に沿って、ホスト Maven リポジトリにアクセスする環境を設定します。
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 ライブラリは、こちらの SDK フォルダで JAR ファイルとして利用できます。アクセス権がない場合は、担当者にお問い合わせください。
google_turnbyturn_*.jar
をダウンロードして解凍します。- ダウンロードした JAR ファイルをプロジェクトの
app/libs
ディレクトリにコピーします。 build.gradle
に以下を追加して、ビルドに JAR を含めます。dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
TurnByTurn ライブラリの使用
ターンバイターン機能を有効にするための大まかな手順は次のとおりです。以降のセクションでは、各ステップについて詳しく説明します。
ナビゲーションの更新情報を受け取るサービス {#service} を作成する
Navigation SDK が TurnByTurn サービスにバインドし、Android Messenger を介してナビゲーションの更新を送信します。これらの更新用に新しいナビゲーション サービスを作成することも、既存のサービスを使用することもできます。
サービスを使用してナビゲーションの更新を受け取るメリットは、サービスを別のバックグラウンド プロセスで実行できることです。
次の例のサービスは、ナビゲーション情報を受け取り、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
メッセージは、TurnByTurnManager.MSG_NAV_INFO
の値に設定されている Message
クラスの Message.what フィールドで識別できます。
ナビゲーション更新用のサービスを登録する {#register}
次のコード スニペットは、ナビゲーション サービスを登録します。
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
サービスの開始と停止
ナビゲーション サービスは、Navigation SDK がバインドされている限りアクティブになります。startService()
と stopService()
を手動で呼び出して、ナビゲーション サービスのライフサイクルを制御できますが、Navigation SDK にサービスを登録すると、サービスは自動的に開始され、登録を解除した場合にのみ停止します。アプリのセットアップ方法によっては、Android ドキュメントのサービスの概要で説明されているように、フォアグラウンド サービスの開始を検討する必要があります。
サービスの登録解除
ナビゲーションの更新の受信を停止するには、Navigation SDK からサービスの登録を解除します。
navigator.unregisterServiceForNavUpdates();
ナビゲーションの状態について {#states}
NavInfo.getNavState()
を使用して、ナビゲーションの現在の状態を取得します。これは次のいずれかです。
Enroute -
ENROUTE
状態は、ガイド付きナビゲーションが現在有効で、ユーザーが指定されたルート上にいることを意味します。現在次の運転ステップに関する情報を利用できます。再検索 -
REROUTING
は、ナビゲーションが進行中であるものの、ナビゲータが新しいルートを探していることを意味します。新しいルートがまだないため、次の運転ステップは使用できません。サンプルアプリでは、ナビゲーション情報ディスプレイに「Rerouting...」というメッセージが表示されます。ルートが見つかると、状態がENROUTE
のNavInfo
メッセージが送信されます。停止 -
STOPPED
はナビゲーションが終了したことを意味します。たとえば、ユーザーがアプリ内でナビゲーションを終了すると、ナビゲーションは停止します。サンプルアプリでは、STOPPED
状態によってナビゲーション情報の表示がクリアされ、残りのステップの手順が表示されなくなります。
フィード表示にデータを入力する
ターンバイターン サービスを設定したので、このセクションではターンバイターン フィードのガイダンス カードに入力するために使用できる視覚要素とテキスト要素について説明します。
ナビゲーション カード情報フィールド
ドライバーがガイド付きナビゲーションに入ると、上部にナビゲーション カードが表示されます。このカードには、Navigation SDK から入力されたナビゲーション日付が含まれています。関連画像は、これらの重要なナビゲーション要素の例を示しています。
次の表に、ナビゲーション情報のフィールドと、それらが表示される場所を示します。
各ナビゲーション ステップのフィールド | ルート全体のフィールド |
---|---|
StepInfo で見つかりました |
NavInfo で見つかりました |
道路名 | 残り時間 |
操作アイコン | 目的地までの距離 |
次のステップまでの距離 | |
車線案内フィールド |
車線案内
Navigation SDK は、ナビゲーションターンカードのレーンを Lane および 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
など、アイコンへの 1 対 1 のマッピングを設定できます。ただし、似たような操作もあるため、1 つのアイコンに複数の操作方法をマッピングしたほうがよい場合もあります。たとえば、TURN_LEFT
と ON_RAMP_LEFT
はどちらも左左折アイコンにマッピングできます。
一部の操作には、SDK が国の運転側に基づいて判断する clockwise
ラベルまたは counterclockwise
ラベルが追加されています。たとえば、車が道路の左側を走行している国では、ドライバーはロータリー交差点や U ターンで時計回りに進み、道路の右側にある国では時計回りに進みます。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 は運転アイコンと車線ガイダンスのアイコンの生成をサポートしています。これらのアイコンは、500 x 74 dp の境界ボックスをターゲットとすることが推奨される Android Auto 自動車アプリ ライブラリの画像サイズ変更ガイダンスに適合しています。詳しくは、Android リファレンス ドキュメントの 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 アプリの場合: