Android Automotive のインテント用 Google マップ

Android インテントを使用すると、Android Automotive 向け Google マップでナビゲーションを開始できます。

概要

このページでは、Android Automotive 向け Google マップで使用できるインテントについて説明します。Android デベロッパー向けの詳細なドキュメントについては、以下をご覧ください。

インテント リクエスト

インテントを使用して Android Automotive 向け Google マップを起動するには、まず Intent オブジェクトを作成し、そのアクション、URI、パッケージを指定する必要があります。

  • アクション。すべての Google マップ インテントは、View アクション(ACTION_VIEW)として呼び出されます。

  • URI。Google マップ インテントは、URI エンコードされた文字列を使用して、選択したアクションと、そのアクションを実行するためのデータを指定します。

  • パッケージ。setPackage("com.google.android.apps.maps") を呼び出すと、Android 向け Google マップ アプリがインテントを処理するようになります。パッケージが設定されていない場合、システムはインテントを処理できるアプリを判断します。複数のアプリが利用可能な場合は、使用するアプリを尋ねられることがあります。

インテントを作成したら、さまざまな方法で、関連するアプリを起動するようシステムにリクエストできます。一般的な方法は、インテントを startActivity() メソッドに渡すことです。システムは、必要なアプリ(この場合は Google マップ)を起動し、対応する Activity を開始します。

// Create a Uri from an intent string. Use the result to create an Intent.
Uri mapIntentUri =
Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
// Create an Intent from mapIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");
// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);

システムがインテントに応答できるアプリを特定できない場合、アプリがクラッシュする可能性があります。そのため、これらのインテントのいずれかをユーザーに提示する前に、まず受信側のアプリがインストールされていることを確認してください。

インテントを受信できるアプリがあることを確認するには、Intent オブジェクトで resolveActivity() を呼び出します。結果が null 以外の場合、インテントを処理できるアプリが少なくとも 1 つ存在し、startActivity() を呼び出しても安全です。結果が null の場合は、インテントを使用しないでください。可能であれば、インテントを呼び出す機能を無効にしてください。

if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}

たとえば、シドニーのタロンガ動物園へのターンバイターン方式のナビを開始するには、次のコードを使用します。

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}

URI エンコードされたクエリ文字列

Google マップ インテントに渡されるすべての文字列は、URI エンコードされている必要があります。たとえば、文字列「1st & Pike, Seattle」は 1st%20%26%20Pike%2C%20Seattle になります。文字列内のスペースは %20 でエンコードするか、プラス記号(+)に置き換えることができます。

android.net.Uri encode() メソッドを使用して文字列をエンコードできます。次に例を示します。

Uri mapIntentUri = Uri.parse("google.navigation:q=" + Uri.encode("1st & Pike, Seattle"));

地図を表示する

geo: インテントを使用して、指定した場所とズームレベルで地図を表示します。次に例を示します。

geo:latitude,longitude?z=zoom

パラメータ

  • latitude と longitude は、地図の中心点を設定します。

  • z は、必要に応じて地図の初期ズームレベルを設定します。指定できる値の範囲は 0(全世界)~ 21(個々の建物)です。上限は、選択した場所で利用可能な地図データによって異なる場合があります。

例

// Creates an intent that will load a map of San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

場所を検索

このインテントを使用して、指定したビューポート内に検索クエリを表示します。

geo:latitude,longitude?q=query
geo:0,0?q=my+street+address

パラメータ

地図の表示に使用されるパラメータに加えて、検索では次のパラメータがサポートされています。

  • q は、地図上でハイライト表示する場所を定義します。q パラメータは、すべての Search リクエストで必須です。場所の名前または住所を場所として受け入れます。文字列は URL エスケープする必要があります。たとえば、「City Hall, New York, NY」という住所は City+Hall%2CNew+York%2CNY に変換する必要があります。

座標を使用して検索結果にバイアスを設定する

非常に具体的な場所を検索する場合、q パラメータに緯度と経度が含まれていれば、緯度と経度は厳密には必要ありません。ただし、正確な住所がわからない場合や、クエリがあいまいな場合は、座標を指定して検索結果をバイアスできます。たとえば、「Main Street」という住所を検索すると、返される結果が多すぎる可能性があります。

// Searching for "101 Main Street" with no lat/long might return too many results
Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

インテント URI に緯度と経度を追加すると、結果が特定の地域に偏ります。

// Searches for "101 Main Street" near San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

ルート沿いの検索

ナビゲーション中に検索目的 geo:latitude,longitude?q=query が送信されると、ルート沿いの検索がトリガーされ、緯度と経度は無視されます。

事前定義されたカテゴリを検索する

車両との統合をサポートするため、車載 Google マップは、次の事前定義されたカテゴリを表示するインテントをサポートしています。

カテゴリ インテント カテゴリのエンコード
ガソリンスタンド gas_station
レストラン restaurant
カフェ cafe
駐車場 parking
電気自動車充電スタンド electric_vehicle_charging_station

カテゴリ インテントは geo:lat,lng?c=category の形式です。

ユーザーの言語 / 地域の設定に関係なく、c=<pre-defined category> を使用します。Google マップでは、このカテゴリの適切な言語 / 地域で関連性の高い結果が表示されます。次に例を示します。

// Search for gas stations nearby
Uri gmmIntentUri = Uri.parse("geo:0,0?c=gas_station");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

その他のカテゴリ検索

ユーザーの言語 / 地域で一般的な検索キーワード(「レストラン」や「コーヒー ショップ」など)を渡すと、Android Automotive 向け Google マップは、条件に一致するビジネス リスティングを検索します。geo: インテントで特定の緯度と経度が指定されている場合、その場所を中心として検索が行われます。場所が指定されていない場合(geo:0,0 など)、Google マップは近くのビジネス リスティングを検索しようとします。次に例を示します。

// Search for restaurants nearby
Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

クエリ文字列とともにズーム パラメータを指定することで、検索結果をさらにバイアスできます。次の例では、ズーム 10 を追加して、近くではなく都市レベルでレストランを検索しようとしています。

Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

ターンバイターン方式のナビを起動する

他の Android デバイスでターンバイターン方式のナビを起動する方法については、Android 向け Google マップ インテントでターンバイターン方式のナビを起動するをご覧ください。

このインテントを使用すると、指定した 1 つまたは複数の住所または座標へのターンバイターン方式のルート案内で Google マップ ナビを起動できます。経路は常にユーザーの現在地から表示されます。

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
google.navigation:place=placename

パラメータ

ナビゲーションを起動するには、place または q を使用します。waypoints は省略可能です。必要に応じて、ウェイポイントを充電スタンドとしてマークするには、電気自動車のルートプランを Google マップに送信するをご覧ください。

  • q は、ナビゲーション検索のエンドポイントを設定します。緯度と経度、またはクエリ形式の住所を指定できます。複数の結果を返すクエリ文字列の場合は、最初の結果が選択されます。

  • place は、エンドポイントを自宅または職場に設定します。ユーザーの自宅に移動するには home を指定し、ユーザーの職場に移動するには work を指定します。

  • avoid は、ルートで回避する対象を設定します。avoid は省略可能で、次の 1 つ以上に設定できます。

    • 通行料金: t
    • h(高速道路)
    • f(フェリー)
  • waypoints は、q で指定された最終目的地までのルートを案内する 1 つ以上の中間地点を指定します。複数のウェイポイントを指定するには、パイプ文字(|)を使用して場所を区切ります(例: Berlin,Germany|Paris,France)。ウェイポイントは必要な数だけ使用できます。ウェイポイントは、URL に記載されている順序でルートに追加されます。各ウェイポイントは、住所またはカンマ区切りの緯度と経度の座標のいずれかです。住所と緯度と経度の座標を同じインテントに含めることができます。文字列は URL エスケープする必要があります。たとえば、「Berlin,Germany|Paris,France」のようなウェイポイントは Berlin%2CGermany%7CParis%2CFrance に変換する必要があります。

例

このインテントは、オーストラリアのシドニーにあるタロンガ動物園へのターンバイターン方式のナビをリクエストします。

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

有料道路やフェリーを避けたい場合は、それらを回避するルートをリクエストできます。

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

自宅への経路を検索する場合は、次のように言います。

Uri mapIntentUri = Uri.parse("google.navigation:place=home");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

次の 3 つの住所に順番にターンバイターン方式のナビを起動するには、タロンガ動物園を最終目的地 q として渡し、Google Sydney とシドニー オペラハウスを経由地として渡します。

  1. Google Sydney

  2. シドニー オペラハウス

  3. タロンガ動物園(オーストラリア、シドニー)

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7CSydney+Opera+House");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

q と同様に、住所の代わりにカンマ区切りの緯度と経度でウェイポイントを表すことができます。たとえば、住所の代わりにシドニー オペラハウスの緯度と経度を渡して同じナビゲーションを起動するには、次のようにします。

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7C-33.856159,151.215256");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

電気自動車のルートプランを Google マップに送信する

この複数目的地のナビゲーション インテントを使用して、一部の目的地を電気自動車(EV)の充電スタンドとして指定します。このインテントは、マルチウェイポイント インテントを拡張したもので、EV ルートプランニング アプリと Google マップの間で充電スタンドの情報を同期することで、ドライバーが目的地に到着するのに十分な電気自動車のバッテリー充電を維持できるようにします。

充電スタンド、ルートの目的:

  • 名前と緯度経度を含める必要があります
  • 充電時間の計算に使用される電力出力をオプションで含めることができます。

Google は、充電スタンドの名前と緯度経度を使用して、一致する充電スタンドの場所を検索し、コネクタの種類、合計、速度、リアルタイムの空き状況、サポートされている支払い方法、ホストのスポット(POI)などのリッチデータを表示します。たとえば、ナビゲーションの最後の部分の屋外駐車場内の運転ルート、営業時間、評価などです。充電スタンドが Google のデータと一致するように、特定の <brand name>(ChargePoint など)を使用します。

パラメータ

以下のパラメータを使用すると、最終目的地とウェイポイント(EV 充電スタンドとして指定されたウェイポイントを含む)の詳細を指定できます。

最終目的地

充電スタンドを最終目的地として設定するには、次を使用します。

  • q: 充電スタンドの緯度と経度の値を含める必要があります。
  • q_type: 1 は、最終目的地が充電スタンドであることを指定します。
  • q_name: 最終目的地の名前。q_type が 1 の場合は必須です。
  • q_power_output_kw: 充電ステーションの電力出力(kW)を表す倍精度浮動小数点数。省略可。

ウェイポイント

ウェイポイントの場合、すべてのパラメータは、最終目的地を除くウェイポイントと同じ順序で、パイプ区切り(|)の値の並列配列です。並列配列の要素数の不一致は、不正な形式のインテントとして扱われます。

1 つ以上の充電スタンドのウェイポイントを追加するには、次のパラメータを使用します。これらはすべて省略可能です。目的地の 1 つが充電スタンドとしてマークされている場合、その目的地にはウェイポイント名が必須になります。

  • waypoints: ターンバイターン方式ナビ インテントで説明されているウェイポイントのリスト。充電スタンドのウェイポイントの緯度経度値にする必要があります。

  • waypoint_types: ウェイポイントごとのタイプ(数値で指定)。0 は任意の停車地(デフォルト値)、1 は充電スタンドです。

  • waypoint_names: ウェイポイント名。このフィールドは、充電スタンドでは必須です。

  • waypoint_power_outputs_kw: 充電ステーションの電力(kW)を表す倍精度浮動小数点数。充電スタンドの場合、必要に応じてウェイポイントの電力出力値を指定できます。この値は、一致する充電スタンドが見つからない場合の代替値として使用されます。空のスロットは、値が指定されていないことを意味します。

ユーザー エクスペリエンス(UX)の動作

複数の目的地を含むルート インテントの場合、ルートの概要画面は表示されますが、ナビゲーションは自動的に開始されません。

インテントの形式が正しい場合、Google マップにはルートの概要画面が表示されます。ルートの概要画面には、インテントのすべてのウェイポイントと最終目的地が表示され、該当する場合は充電の推奨事項が表示されます。

充電スタンドとしてマークされた経由地または最終目的地について、Google マップは Google のデータベースで一致する場所を検索します。充電スタンドに関する最適な情報が表示されるようにするには、次の手順を行います。

  • 一致するものが見つかった場合、Google マップは Google データを使用して、ユーザー インターフェース(UI)に充電スタンドを表示し、充電スタンドのおすすめを表示します。

  • 一致するものが見つからない場合は、充電スタンドのインテントで提供されたデータ(緯度経度、名前、出力)を使用して、この充電スタンドを UI に表示し、この充電スタンドでの充電を推奨します。

例

次の例は、複数の充電ステーションを経由するナビゲーションや、不明な電力出力の処理など、さまざまな EV ルートプランニングのシナリオでインテントを構築する方法を示しています。

複数の充電スタンドを経由して最終目的地までナビゲートする

次のインテントは、2 つの充電スタンド(ChargePoint と Evie)を経由して、最終目的地である Port Macquarie NSW に移動します。

目的地の順序:

  1. ChargePoint 充電スタンド(場所: -32.9599188,151.6240806、出力: 6.6kw)

  2. Evie 充電スタンド(場所: -31.9432539,152.4699808、出力: 350 kW)

  3. ポート マッコーリー(ニューサウスウェールズ州)

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=Port+Macquarie+NSW"
            + "&waypoints=-32.9599188%2C151.6240806%7C-31.9432539%2C152.4699808"
            + "&waypoint_types=1%7C1"
            + "&waypoint_names=ChargePoint+Charging+Station%7CEvie+Charging+Station"
            + "&waypoint_power_outputs_kw=6.6%7C350");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

不明な電力出力

電力出力値が不明な場合は、waypoint_power_outputs_kw の関連するスロットを空のままにします。すべてのスロットが空の場合、waypoint_power_outputs_kw パラメータを指定する必要はありません。

目的地の順序:

  1. ChargePoint 充電スタンド(位置: -32.9599188,151.6240806、出力: 不明)

  2. ポート マッコーリー(ニューサウスウェールズ州)

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=Port+Macquarie+NSW"
            + "&waypoints=-32.9599188%2C151.6240806"
            + "&waypoint_types=1"
            + "&waypoint_names=ChargePoint+Charging+Station");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

最終目的地を充電スタンドとしてマークする

最終目的地を充電スタンドとしてマークするには、q_type、q_name、q_power_output_kw の各パラメータを指定します。

目的地の順序:

  1. タロンガ動物園(オーストラリア、シドニー)

  2. ChargePoint 充電スタンド(位置: -32.9599188,151.6240806、出力: 不明)

  3. Evie 充電スタンド(位置: -31.9432539,152.4699808、出力: 350kw)

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=-31.9432539,152.4699808&q_type=1&q_name=Evie+Charging+Station&q_power_output_kw=350"
            + "&waypoints=Taronga+Zoo%2C+Sydney+Australia%7C-32.9599188%2C151.6240806"
            + "&waypoint_types=0%7C1"
            + "&waypoint_names=%7CChargePoint+Charging+Station"
            + "&waypoint_power_outputs_kw=%7C");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

アクション インテント

インターフェースを備えた次のアクション インテントを使用できます。

アクション 説明
geo.action:?act=mute ナビゲーションの音声案内をすべてミュートします。
geo.action:?act=unmute ナビの音声案内のミュートを解除します。
geo.action:?act=show_traffic 地図上に交通状況の線を表示します。
geo.action:?act=hide_traffic 地図上の交通状況の線を非表示にします。
geo.action:?act=show_satellite 地図上に衛星画像を表示します。
geo.action:?act=hide_satellite 地図上の衛星画像を非表示にします。
geo.action:?act=show_alternates Google マップで代替ルート画面が開きます(ナビゲーション中のみ機能します)。
geo.action:?act=route_overview Google マップでルートの概要画面が開きます(ナビゲーション中のみ機能します)。
geo.action:?act=query_next_turn Google マップが次の曲がり角を音声で案内します(ナビゲーション中のみ)。
geo.action:?act=distance_to_next_turn Google マップが次の曲がり角までの距離を読み上げます(ナビゲーション中のみ)。
geo.action:?act=time_to_next_turn Google マップが次の曲がり角までの時間を読み上げます(ナビゲーション中のみ機能します)。
geo.action:?act=distance_to_destination Google マップが目的地までの距離を読み上げます(ナビゲーション中のみ)。
geo.action:?act=go_back Google マップの UI で前の画面に戻ります。
geo.action:?act=my_location Google マップで、ユーザーの現在地が地図の中心に表示されます。
geo.action:?act=show_map Google マップで開いているカードがすべて閉じ、地図ビューに戻ります。
geo.action:?act=query_current_road Google マップが現在の道路を読み上げます。
geo.action:?act=query_destination Google マップが目的地を読み上げます。
geo.action:?act=traffic_report Google マップが交通情報レポートを読み上げます。
geo.action:?act=clear_search_results Google マップは、検索結果画面を閉じます(開いている場合)。
geo.action:?act=open_destination_input Google マップで目的地の入力検索画面が開きます。
geo.action:?act=apply_electric_vehicle_connector_filter 電気自動車充電スタンドの検索結果にコネクタタイプのフィルタを適用します。
geo.action:?act=remove_electric_vehicle_connector_filter 電気自動車充電スタンドの検索結果からコネクタタイプのフィルタを削除します。
geo.action:?act=apply_electric_vehicle_payment_filter 電気自動車充電スタンドの検索結果に支払いフィルタを適用します。
geo.action:?act=remove_electric_vehicle_payment_filter 電気自動車充電スタンドの検索結果から支払いフィルタを削除します。
geo.action:?act=apply_electric_vehicle_fast_charging_filter 電気自動車充電スタンドの検索結果に急速充電フィルタを適用します。
geo.action:?act=remove_electric_vehicle_fast_charging_filter 電気自動車充電スタンドの検索結果から急速充電フィルタを削除します。
geo.action:?act=avoid_tolls ユーザーがナビゲーションを使用している場合、有料道路を避けるルートを検索するよう Google マップに指示します。 現在のルートに有料道路が含まれている場合、ルート変更が行われることがあります。
geo.action:?act=allow_tolls ユーザーがナビゲーションを使用している場合、有料道路を含むルートを許可するよう Google マップに指示します。 有料道路を許可することでより良いルートが利用可能になる場合は、ルート変更が行われることがあります。
geo.action:?act=avoid_ferries ユーザーがナビゲーションを使用している場合、フェリーを使用するルートを避けるよう Google マップに指示します。現在有効なルートにフェリーが含まれている場合、ルート変更が発生することがあります。
geo.action:?act=allow_ferries ユーザーがナビゲーションを使用している場合、フェリーを利用するルートを許可するよう Google マップに指示します。フェリーを許可することでより良いルートが利用可能になる場合は、ルート変更が行われる可能性があります。
geo.action:?act=avoid_highways ユーザーがナビゲーションを使用している場合、高速道路を使用するルートを避けるよう Google マップに指示します。現在の有効なルートに高速道路が含まれている場合、ルート変更が発生する可能性があります。
geo.action:?act=allow_highways ユーザーがナビゲーションを使用している場合、高速道路を含むルートを許可するよう Google マップに指示します。高速道路を許可することでより良いルートが利用可能になる場合は、ルート変更が発生する可能性があります。
geo.action:?act=eta ユーザーがナビゲーションを使用している場合、Google マップは目的地の予定到着時刻(例:午前 9 時 15 分)を読み上げます。
geo.action:?act=time_to_destination ユーザーがナビゲーションを使用している場合、Google マップは目的地までの予想時間(15 分など)を読み上げます。
geo.action:?act=exit_navigation ナビを終了します。
geo.action:?act=select_search_result&id=0 検索結果が画面に表示されている場合(添付の画像を参照)、このアクションは、指定された ID パラメータに基づいて、n 番目の結果へのナビゲーションを開始します。インデックスは 0 ベースです(つまり、geo.action:?act=select_search_result&id=0 はリストの最初の結果を選択します)。

検索結果が画面に表示されます。