ターンバイターン方式のデータフィードを有効にする

ターンバイターン方式のデータフィードは、ナビゲーションのみの情報を 地図ベースのナビゲーション ガイダンス用に設計されています。今後の計画を提示し 次の要素を指定します。

  • アイコン(左、右、U ターン)
  • ロータリーで番号を変える
  • 道路名
  • 次のナビゲーション ステップや最終ステップまでの推定距離と時間 目的地

ターンバイターン方式のフィードを使用すると、 Navigation SDK UI が不適切(Android Auto や小さい画面など) フル Android スタックを利用できない場合に、この画面が表示されます。たとえば、 二輪車の運転手に使用することもあれば、 より速く目的地にたどり着けるよう支援するナビゲーションのみの案内 気が散ることなく自信を持って取り組むことができます。

この SDK を使用するには、サービスを作成して 新しいナビゲーション情報を受け取れるようにする Android 用 Navigation SDK リアルタイムで(ナビゲーション中に 1 秒に 1 回程度)。

このドキュメントでは、 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 ライブラリは、この SDK フォルダ内の JAR ファイルとして入手できます。アクセス権がない場合は、担当者にお問い合わせください。

  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 スマートフォンの Android アプリで メッセンジャー をタップします。これらの更新用に新しいナビゲーション サービスを作成するか、既存の あります。

サービスを使用してナビゲーションの更新を受信する利点は、 別のバックグラウンド プロセスで実行することもできます。

次の例のサービスは、ナビゲーション情報を受け取り、 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() デフォルト サービス アカウントではなく、サービス アカウントを サービスが自動的に起動します。 登録を解除するとのみ停止します。アプリの設定によっては、 フォアグラウンド サービスの開始を検討したい場合は、 ドキュメント Service 概要をご覧ください。

サービスの登録解除

ナビの更新情報の受信を停止するには、サービスの登録を Navigation SDK。

navigator.unregisterServiceForNavUpdates();

ナビゲーション状態について

NavInfo.getNavState() を使用して、ナビゲーションの現在の状態( 次の選択肢があります。

  • 配送中 - ENROUTE 状態は、ガイド付きナビゲーションが現在進行中であることを意味します。 ユーザーが指定の経路を進んでいます。現在の 次の操作ステップが表示されます。

  • ルート変更 - REROUTING はナビが進行中であることを意味しますが、 新しいルートを探していますこの後の操作ステップは 新しいルートがまだないため、空いています。サンプルアプリでの「ルート変更中...」次の場所に表示されます: ナビゲーション情報を表示します。ルートが見つかると、NavInfo というメッセージが ステータス ENROUTE で送信されます。

  • 停止 - STOPPED はナビゲーションが終了したことを意味します。例: ナビゲーション ユーザーがアプリのナビゲーションを終了すると停止します。サンプルアプリでは、 STOPPED 状態は、ナビゲーション情報の表示を消去して、ステップが残らないようにする 表示されなくなります。

フィードの表示内容を入力する

ターンバイターン サービスを設定したので、このセクションでは ガイダンス カードの入力に使用できるビジュアル要素とテキスト要素 ターンバイターン方式のフィードを利用できます。

W Ahwanee の 100 フィート先にある右折 / 左折を表示しているモバイル画面
目的地までの残り時間は 46 分です
残り距離は 39 です
マイル。

ユーザーがガイド付きナビゲーションに入ると、上部にナビゲーション カードが表示され、 ナビゲーション データを含む Navigation SDK。関連画像は、Compute Engine が ナビゲーション要素を追加します。

次の表に、ナビゲーション情報のフィールドとその表示場所を示します。

各ナビゲーション ステップのフィールド ルート全体のフィールド
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 enum では、ナビゲーション中に発生する可能性のある各操作が定義されています。 StepInfo.getManeuver() メソッドから特定のステップの運動を取得できます。

操作アイコンを作成し、関連する操作とペア設定する必要があります。 操作によっては、 DESTINATION_LEFTDESTINATION_RIGHT。ただし一部の操作は 同様に、複数の操作を 1 つのアイコンにマッピングできます。対象 サンプルの TURN_LEFTON_RAMP_LEFT はどちらも左左折アイコンにマッピングできます。

一部の操作には、追加の clockwise ラベルまたは counterclockwise ラベルが含まれます。 これは、国の運転面に基づいて SDK が決定します。たとえば、 車が道路の左側である場合、ドライバーは 時計回りの環状交差点や 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

生成されたアイコンを使用する

Navigation によって提供される、生成されたアイコンの小さなリスト
できます。

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 フィールドです。

次のステップ