ナビゲーション アプリのインテントを実装する

Gemini は、ナビゲーション アプリがサポートできる 3 種類のインテント形式を使用します。相互運用性を実現し、アプリと Gemini を統合するには、このページで説明するインテント フィルタをアプリのマニフェストで宣言します。インテントの詳細については、Intent をご覧ください。

Gemini ナビゲーション アプリの Intent クラスは、次のインテントをサポートしています。

  • ナビゲーション インテント
  • 検索目的
  • カスタム アクション インテント

インテント データフロー

図 1. インテント データフロー。

インテント データのパラメータ

インテント データは、渡すインテントに基づくパラメータを含む URI 形式に従います。一部のパラメータは常にデータで提供されます。つまり、常に明示的な値が設定されていることが想定されます。ただし、オプション パラメータには、データに値が設定されていない場合があります。詳細については、データテストをご覧ください。

オフライン インテント

このページに記載されているインテントには、すべてオフライン バリエーションがあります。これらを区別するには、スキームに .offline を追加します。たとえば、ナビゲーション インテントは geo.offline スキームを使用します。マニフェスト内のこれらのインテント フィルタは、アプリがこれらのアクションをオフラインでサポートできることを示します。

ナビゲーション インテントを使用して、特定の目的地へのナビゲーションを求めるユーザーのリクエストを満たします。この目的地は、単一の場所(住所)または複数の場所(コーヒー ショップやガソリン スタンドなど)のいずれかになります。インテントデータは、各インテントに指定された URI 形式に従います。

インテントの形式

Intent クラスは、ナビゲーション アプリのインテントに次の形式を使用します。

カテゴリ: android.intent.category.DEFAULT

アクション:

  • Android Auto と Android Automotive OS: androidx.car.app.action.NAVIGATE
  • その他のフォーム ファクタ: android.intent.action.NAVIGATE

スキーム: geo

例:

  • geo:0,0?q=Googleplex
  • geo:0,0?q=1600+Amphitheatre+parkway&mode=b&intent=add_a_stop
  • geo:0,0?q=coffee+shop&mode=w&intent=navigation
  • geo:1.1,2.2?q=Starbucks+on+Main+Street&mode=w&intent=navigation

推奨されるアプリの動作: 指定された場所へのナビゲーションが開始されるか、複数のオプションから選択するようユーザーに求められます。

マニフェストのインテント フィルタ

アプリのマニフェスト ファイルで次のインテント形式を宣言して、ナビゲーション アプリがナビゲーション インテントを受信できることを Gemini に知らせます。

Android Auto と Android Automotive OS 以外のすべてのフォーム ファクタ:

<intent-filter>
  <action android:name="android.intent.action.NAVIGATE" />
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:scheme="geo" />
</intent-filter>

Android Auto と Android Automotive OS:

<intent-filter>
  <action android:name="androidx.car.app.action.NAVIGATE" />
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:scheme="geo" />
</intent-filter>

指定されたパラメータ

指定されたナビゲーション アプリのインテント データには、次のパラメータが含まれていることが想定されます。

位置情報のクエリまたは地理座標

ナビゲーション インテント クエリには、リクエストされたデータの種類に応じて、次のパラメータのいずれかまたは両方が含まれます。

  • 位置情報のクエリ

    ユーザーが移動しようとしている場所を指します。このデータを使用して、ユーザーの宛先を解決します。

    パラメータ キー: q
    値: ユーザーがクエリした目的地。

    例: geo:0,0?q=Golden+Gate+Bridge
    解釈: ユーザーはゴールデン ゲート ブリッジに移動したいと考えています。

  • 地理座標(緯度と経度)

    ユーザーがナビゲーションに使用する特定の座標を指します。

    パラメータキー: geo:lat,long
    値: ユーザーがクエリした座標。

    例: geo:1.1,2.2?mode=w&intent=navigation
    解釈: ユーザーは座標(1.1、2.2)に移動したいと考えています。

オプション パラメータ

このセクションでは、ナビゲーション アプリのインテント データで指定される省略可能なパラメータについて説明します。

インテント

ユーザーの意図を定義します。このパラメータが設定されていない場合、デフォルトのユーザー インテントは navigation とみなされます。

パラメータ キー: intent
有効な値:

  • navigation [デフォルト値] - 目的地を置き換えて、ナビゲーションを開始します。「x に移動」などのクエリに使用します。
  • add_a_stop - 経由地を前の目的地とともに次の目的地として追加します。「x に経由地を追加して」などのクエリに使用します。
  • directions - ナビゲーションを開始せずにルートの経路を表示します。これは、「x への行き方」のようなクエリに使用します。

例: geo:47.61594547836694,-122.20373173098756?q=575+Bellevue+Square,+Bellevue,+WA+98004&intent=add_a_stop 解釈: ユーザーは、現在の座標 [47.6, -122.2] を使用して、ベルビュー(ベルビュー スクエア)に立ち寄り地を追加したいと考えています。

不使用

ナビゲーションで避けるべきことを定義します。

パラメータ キー: avoid
有効な値:

  • f - フェリー
  • h - 幹線道路
  • t - 有料道路

例: geo:0,0?q=googleplex&avoid=tf
解釈: ユーザーは、有料道路やフェリーを避けて Googleplex に移動したいと考えています。

トラベルモード

交通手段モードは、ユーザーがクエリで指定した交通手段を表します。

パラメータ キー: mode
有効な値:

  • b - 自転車
  • d - ドライブ
  • x - タクシー
  • l - オートバイ
  • r - 交通機関
  • w - 徒歩

例: geo:0,0?q=Googleplex&mode=r
解釈: ユーザーは公共交通機関を使って Googleplex に行きたいと考えています。

Entry

エントリのソースを記録するために使用されます。

有効な値: assistant

例: geo:47.61594547836694,-122.20373173098756?entry=assistant

検索目的

検索インテントを使用してクエリを検索し、運転中にルートに沿って複数の結果を表示します。

インテントの形式

Intent クラスは、検索インテントに次の形式を使用します。

カテゴリ: android.intent.category.DEFAULT

アクション: android.intent.action.VIEW

スキーム: geo

例: geo:0,0?q=restaurants+nearby

推奨されるアプリの動作: ユーザーのクエリに一致する場所のリストを開きます。

マニフェストのインテント フィルタ

Gemini がナビゲーション アプリで検索インテントを受信できることを認識できるように、アプリのマニフェスト ファイルで次のインテント形式を宣言します。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:scheme="geo" />
</intent-filter>

指定されたパラメータ

指定された検索目的データには、次のパラメータが含まれていることが想定されます。

位置情報のクエリ

位置情報クエリは、運転中にユーザーが検索している場所です。このクエリは、不正確な場合や、アクティブなナビゲーション ルートに沿っている場合があります。

パラメータ キー: q
値: ユーザーの検索語句。コーヒー ショップや大学などの場所の種類の場合もあれば、「近くの」や「評価の高い」などの限定詞が含まれる場合もあります。

例: geo:0,0?q=restaurants+nearby
解釈: ユーザーは近くのレストランを検索したいと考えています。

カスタム アクション インテント

事故の報告やナビゲーションの終了などのカスタム アクションには、カスタム インテントを使用します。メイン アクション タイプは、act クエリ パラメータで定義されます。アクション タイプに応じて、追加のパラメータを設定できます。

インテントの形式

Intent クラスでは、カスタム アクション インテントに次の形式を使用します。

カテゴリ: android.intent.category.DEFAULT

アクション: android.intent.action.VIEW

スキーム: geo.action

例: geo.action:?act=report&accident_type=major

マニフェストのインテント フィルタ

アプリのマニフェスト ファイルで次のインテント形式を宣言して、ナビゲーション アプリがカスタム アクション インテントを受信できることを Gemini に知らせます。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:scheme="geo.action" />
</intent-filter>

指定されたパラメータ

指定されたカスタム アクション インテント データには、次のパラメータが含まれていることが想定されます。

アクション タイプ

ユーザーが実行するカスタム アクションのタイプを定義します。

パラメータキー: act

例:

  • geo.action:?act=report_crash&accident_type=major
    解釈: ユーザーが重大事故を報告したいと考えている。

  • geo.action:?act=mute
    解釈: ユーザーが音声ガイドをミュートしたい。

  • geo.action:?act=exit_navigation
    解釈: ユーザーが現在のナビゲーションを終了したいと考えています。

推奨されるアプリの動作: ナビゲーション アプリでリクエストされたアクションを実行するか、サポートされていないアクションのメッセージを表示します。

次の図は、レスポンス クエリの Key-Value ペアの例を示しています。

カスタム アクションのインテント データフロー

図 2. カスタム アクションのインテント データフロー。

Key-Value ペア:

"act": "report_crash"
"road_direction": other_side"

すべてのカスタム アクションには、キーとして act パラメータが常に含まれます。前述のコード例では、一部のアクションに Key-Value ペアを追加できます。たとえば、act=report_crashaccident_typeroad_direction の追加の鍵をサポートしています。

キー accident_type は、minormajor の 2 つの値をサポートできます。

有効な値

次の表に、ユーザーがナビゲーション アプリで実行しようとしているアクションとして Gemini が渡す可能性のある値を示します。

説明 省略可能なパラメータキー 省略可能なパラメータ値
allow_ferries フェリーを許可するようにルート設定を変更します。
allow_highways 高速道路を許可するようにルート設定を変更します。
allow_tolls ルート設定を変更して有料道路を許可します。
avoid_ferries フェリーを避けるようにルート設定を変更します。
avoid_highways 高速道路を避けるようにルート設定を変更します。
avoid_tolls ルート設定を変更して有料道路を回避します。
distance_to_destination 目的地までの距離を表示します。
distance_to_next_turn 次の曲がり角までの距離を表示します。
eta 目的地までの到着予定時刻を表示します。
exit_navigation ナビゲーションを終了またはキャンセルします。
follow_mode 地図ビューを追跡モードに変更します。
go_back 前の地図操作に戻ります。
hide_satellite 地図の設定を変更して、衛星情報を非表示にします。
hide_traffic 地図の設定を変更して交通情報を非表示にします。
mute 音声案内をミュートします。
query_current_road ユーザーが現在走行している道路を表示します。
query_destination 宛先を表示します。
query_next_turn 次のターンを表示します。
report_crash クラッシュを報告します。 accident_type minor
major
road_direction this_side
other_side
report_hazard 通行障害を報告します。 hazard_type animal
broken_traffic_light
construction
flooding
fog
hail
ice
missing_sign
object_on_road
pothole
roadkill
snow
vehicle
weather
road_direction this_side
other_side
location_on_road on_road
on_shoulder
report_police 警察活動を報告します。 road_direction this_side
other_side
report_road_closure 通行止めを報告します。 road_closure_type partial
full
report_traffic 交通状況を報告します。 traffic_type moderate
heavy
standstill
road_direction this_side
other_side
route_overview ルートの概要を表示します。
show_alternates 別のルートを表示します。
show_directions_list ターンバイターン方式のルート案内を表示します。
show_satellite 地図に衛星情報を表示します。
show_traffic 地図に交通状況を表示します。
time_to_destination 目的地までの到着予定時刻を表示します。
time_to_next_turn 次の曲がり角までの到着予定時刻を表示します。
unmute 音声案内のミュートを解除します。

ナビゲーション ステータスを取得する

ユーザーがルートのステータスについて問い合わせたときに、Gemini が正確なリアルタイム情報を提供できるようにするには、アプリが NavigationManager カーサービスを使用してナビゲーション メタデータを提供する必要があります。実装ガイダンスについては、ナビゲーション メタデータを伝えるをご覧ください。