適用於 Android Automotive 意圖的 Google 地圖

免責事項

這項產品/功能將會變更,且不受任何服務水準協議 (SLA) 或廢止政策的規範。此實作方式可能在後續版本中有所變動。

關於本說明文件隨附的範例軟體、資料檔案和/或原始碼:本產品係依「現狀」提供,且不提供任何形式的擔保,Google 明確不提供任何明示、默示、法定或其他擔保,包括但不限於適售性、特定用途適用性及未侵犯本產品任何相關權利的擔保。


您可以透過 Android Automotive 意圖在 Google 地圖中啟動導航功能。

詳情請參閱「Android 版 Google 地圖意圖」。

如要進一步瞭解如何將應用程式提供給執行 Android Auto 或 Android Automotive OS 的車輛,請參閱「車輛專用 Android」。

總覽

本頁說明可用於 Google 地圖 Android Automotive 的意圖。如需詳細的 Android 開發人員說明文件,請參閱:

意圖要求

如要透過意圖啟動 Google Maps for Android Automotive,您必須先建立「意圖」物件,並指定其動作、URI 和套件。

  • 動作。所有 Google 地圖意圖都稱為 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()]。如果結果不是空值,表示有至少一個應用程式可以處理意圖,而且可以放心呼叫 [startActivity()]。如果結果是空值,請勿使用該意圖,並盡可能停用叫用意圖的功能。

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

例如,若要在雪梨的塔倫加動物園 (Taronga Zoo) 啟動即時路線導航,您可以使用以下程式碼:

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 parse() 方法編碼字串。舉例來說:

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

啟動即時路線導航

使用此意圖即可啟動 Google 地圖導航,其中包含前往一或多個地址/座標的即時路線導航。路線一律從使用者目前所在位置提供。

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

參數

如要啟動導航,請將 placeqwaypoints (選用) 搭配使用。如要選擇將路線控點標示為充電站,請參閱「將電動車行程計畫傳送至 Google 地圖」。

  • q 會設定導航搜尋的終點。可以是經緯度或查詢格式化的地址。如果這個查詢字串會傳回多筆結果,系統會選取第一筆結果。

  • place 會將端點設為住家或公司。請指定用於前往使用者的住家的住家,以及導航至使用者的工作地點。

  • avoid 會設定路線應盡量避免的功能。avoid 為選用項目,可設為以下一或多個項目:

    • 過路費:t
    • 高速公路佔 h
    • f 可搭乘渡輪
  • waypoints 可指定一或多個中介地點,將路線轉送至 q 指定的最終目的地。如要指定多個路線控點,請使用直立線字元 (|) 來分隔地點,例如 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);

如要依序啟動以下三個地址的即時路線導航功能,請傳遞塔龍加動物園做為最終目的地 q,並將 Google 雪梨和雪梨歌劇院做為路線控點:

  1. Google 雪梨

  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 地圖

使用此多目的地導航意圖,將某些目的地指定為電動車充電站。這項意圖會延伸多路線點意圖,協助駕駛人在電動車規劃應用程式與 Google 地圖之間同步處理充電停靠站資訊,協助駕駛維持充足的電動車電池電力以抵達目的地。

針對充電站,行程意圖:

  • 必須包含名稱和經緯度
  • 可視需要包含功率輸出,用來計算充電時間

Google 會根據充電站名稱以及經緯度來找出相符的充電站地點,並顯示連接器類型、總計、速度和即時供應情形、支援的付款方式,以及主機搜尋點等豐富的資料。例如,戶外停車場中的行車路線 (導航最後一部分、營業時間和評分)。為確保充電站與 Google 資料相符,請使用 <brand name>,例如 ChargePoint

參數

終點站

如要將充電站設為最終目的地,請使用:

  • q:必須包含充電站的經緯度值。
  • q_type1 指定最終目的地為充電站。
  • q_name:最終目的地的名稱。如果 q_type1,則為必要欄位。
  • q_power_output_kw:充電站功率輸出的雙數字,以千瓦為單位。選用。

路點

針對路線控點,所有參數都是以路線控點順序平行且 | 分隔的值陣列,不含最終目的地。系統會將平行陣列中的元素數量不相符視為意圖格式錯誤。

如要新增一或多個充電站路線控點,請使用下列參數 (全為選用參數)。如果其中一個目的地已標示為充電站,那麼路線控點名稱就會成為該目的地的必要名稱。

  • waypoints:即時路線導航意圖中所述的路線控點清單。充電站路線控點的所需時間須為經緯度。

  • waypoint_types:以數字形式指定每個路線控點的類型。0 是任何停靠站 (預設值),1 則是充電站。

  • waypoint_names:路線控點名稱。充電站的必填欄位。

  • waypoint_power_outputs_kw:充電站功率雙號碼,以千瓦為單位。針對充電站,您可以選擇指定路線控點電源輸出值,在找不到相符的車站時,做為備用站。如果版位空白,代表未提供任何值。

使用者體驗 (UX) 行為

如果行程意圖有多個目的地,系統會顯示路線總覽畫面,但不會自動啟動導航。

如果意圖格式正確,Google 地圖會顯示行程的路線總覽畫面。路線總覽畫面會顯示所有路線控點和意圖的最終目的地,並在適用情況下提供充電建議。

針對標示為充電站的任何路線控點或最終目的地,Google 地圖會搜尋 Google 資料庫中相符的地點。

如果找到相符項目,Google 地圖會使用 Google 資料在使用者介面 (UI) 中顯示充電站,並提供充電站的充電建議。如果找不到相符項目,系統會使用充電站意圖中的資料 (具經緯度輸出) 在 UI 中顯示此充電站,並在此充電站提供充電建議。

示例

透過多個充電站導航至最終目的地

下列意圖會透過兩個充電站 (ChargePoint 和 Evie) 導覽至最終目的地:Macquarie NSW。

目的地順序:

  1. ChargePoint 充電站 (位置:-32.9599188,151.6240806,電源輸出:6.6kw)

  2. Evie 充電站 (位置:-31.9432539,152.4699808,電源輸出:350kw)

  3. 新南威爾斯港 (Macquarie NSW)

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. 新南威爾斯港 (Macquarie NSW)

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_typeq_nameq_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);