免責事項
這項產品/功能將會變更,且不受任何服務水準協議 (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
參數
如要啟動導航,請將 place
或 q
與 waypoints
(選用) 搭配使用。如要選擇將路線控點標示為充電站,請參閱「將電動車行程計畫傳送至 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 雪梨和雪梨歌劇院做為路線控點:
Google 雪梨
雪梨歌劇院
澳洲雪梨塔龍加動物園
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_type
:1
指定最終目的地為充電站。q_name
:最終目的地的名稱。如果q_type
為1
,則為必要欄位。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。
目的地順序:
ChargePoint 充電站 (位置:-32.9599188,151.6240806,電源輸出:6.6kw)
Evie 充電站 (位置:-31.9432539,152.4699808,電源輸出:350kw)
新南威爾斯港 (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
參數。
目的地順序:
ChargePoint 充電站 (位置:-32.9599188,151.6240806,電源輸出:不明)
新南威爾斯港 (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_type
、q_name
和 q_power_output_kw
參數。
目的地順序:
澳洲雪梨塔龍加動物園
ChargePoint 充電站 (位置:-32.9599188,151.6240806,電源輸出:不明)
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);