藉由語音控制,駕駛人執行工作時就能專心注意路況,不必放開方向盤。車用應用程式有專屬的應用程式動作,可讓駕駛人使用 Google 助理控管資訊娛樂系統上的 Android 應用程式,只要說出「Ok Google,使用範例應用程式找路邊車位」這類指令就行了。
應用程式動作可搭配搜尋點 (POI) 車輛應用程式使用。本指南介紹了將應用程式動作整合至搜尋點應用程式時,需注意的具體需求和限制。
運作方式
應用程式動作會將應用程式內功能延伸至 Google 助理,讓使用者可以透過語音指令存取應用程式功能。當使用者叫用應用程式動作時,Google 助理會依據應用程式 shortcuts.xml
資源中宣告的內建意圖 (BII) 比對查詢內容,然後在要求的畫面啟動應用程式。
您可以使用 Android capability
,在應用程式中宣告支援 BII。使用 Google Play 管理中心上傳應用程式時,Google 會註冊應用程式中宣告的功能,讓使用者透過 Google 助理存取這些功能。
- 使用者觸發 Google 助理,並針對特定應用程式提出語音要求。
- Google 助理依據預先訓練模型 (BII) 比對要求內容,並擷取 BII 支援的所有參數。
- 在此範例中,Google 助理會比對查詢內容以及
GET_CHARGING_STATION
BII,接著擷取位置參數「SFO」,然後將位置轉譯為地理區域座標。 - 系統透過此 BII 的執行要求定義,觸發應用程式。
- 應用程式處理執行要求,在駕駛人的資訊娛樂系統中顯示充電站選項。
限制
在車輛上實作應用程式動作有下列限制:
車輛應用程式動作必須透過 Android 深層連結執行。如要瞭解應用程式動作的執行要求,請參閱「提供內建意圖的執行要求詳細資料」。
在車輛上實作時,僅適用下列 BII:
- 停車 -
GET_PARKING_FACILITY
- 充電 -
GET_CHARGING_STATION
- 停車 -
相關規定
請執行下列步驟,準備讓車用應用程式執行應用程式動作:
確定意圖和執行要求
如要利用應用程式動作,以語音方式啟用車用應用程式,第一步是需確定應用程式支援哪些使用者語音指令 (或稱「意圖」)。第二步是為每項意圖定義執行要求,指定應用程式應如何滿足要求。
您的車用應用程式支援哪些意圖?
應用程式動作提供預先訓練的語音模型 (稱為內建意圖,簡稱 BII),可在使用者說出「Ok Google」時,理解並解讀使用者的語音指令。如要回應語音要求,您只需向 Google 助理宣告應用程式支援的 BII 即可。舉例來說,如果您想讓應用程式協助尋找停車設施,可以實作
GET_PARKING_FACILITY
BII。或者,如要協助使用者尋找電動車充電站,則可實作GET_CHARGING_STATION
BII。您的應用程式如何滿足每項意圖?
您的應用程式會啟動到適當的畫面,藉此執行語音要求。應用程式動作會為執行要求提供擷取自使用者要求的參數,讓您根據使用者需求量身打造回應內容。
整合應用程式動作
確定執行要求策略後,請按照下列步驟為車用應用程式啟用語音功能:
開啟主要活動
AndroidManifest.xml
,並宣告支援 Android 捷徑。您可以使用capability
捷徑元素,向 Google 助理宣告應用程式支援的 BII。詳情請參閱「新增功能」。<!-- AndroidManifest.xml --> <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
接著,在
AndroidManifest.xml
中新增<intent-filter>
元素。這樣做可讓 Google 助理使用深層連結連線到應用程式內容。如果是 Android Auto 執行要求,
<intent-filter>
會與行動應用程式相同。如果是 Android Automotive OS,應用程式的
CarAppService
工作階段會觸發 Google 助理。如要允許工作階段觸發深層連結,請在AndroidManifest.xml
的<activity>
元素中指定<intent-filter>
。
<!-- AndroidManifest.xml --> <activity ... android:name="androidx.car.app.activity.CarAppActivity"> ... <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="YOUR_SCHEME" android:host="YOUR_HOST" /> </intent-filter> </activity>
如果應用程式的
res/xml
目錄中還沒有shortcuts.xml
檔案,請建立新的檔案。如要瞭解應用程式動作如何使用 Android 捷徑,請參閱「建立 shortcuts.xml」。在
shortcuts.xml
中,為所選的 BII 實作capability
。然後新增巢狀<intent>
,定義應用程式的執行要求。<!-- shortcuts.xml --> <?xml version="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <capability android:name="actions.intent.GET_PARKING_FACILITY"> <intent> <url-template android:value="YOUR_SCHEME://YOUR_HOST{?name,address,disambiguatingDescription,latitude,longitude}"> <!-- Facility name, e.g. "Googleplex" --> <parameter android:name="parkingFacility.name" android:key="name"/> <!-- Address, e.g. "1600 Amphitheatre Pkwy, Mountain View, CA 94043" --> <parameter android:name="parkingFacility.address" android:key="address"/> <!-- Disambiguate the type of service, e.g. "valet" --> <parameter android:name="parkingFacility.disambiguatingDescription" android:key="disambiguatingDescription"/> <!-- Latitude, e.g. "37.3861" --> <parameter android:name="parkingFacility.geo.latitude" android:key="latitude"/> <!-- Longitude, e.g. "-122.084" --> <parameter android:name="parkingFacility.geo.longitude" android:key="longitude"/> </intent> </capability> </shortcuts>
最後更新車用應用程式的
Session()
邏輯,以便處理輸入的應用程式動作執行要求。以下範例示範Session.onCreateScreen()
和Session.onNewIntent()
的意圖處理方式。onCreateScreen()
Kotlin
@Override fun onCreateScreen(@NonNull intent: Intent): Screen { if (intent.getData() != null) { val uri: Uri = intent.getData() // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center" // Build your Templates with parsed uri parameters ... } }
Java
@Override public Screen onCreateScreen(@NonNull Intent intent) { if (intent.getData() != null) { Uri uri = intent.getData(); // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center" // Build your Templates with parsed uri parameters ... } }
onNewIntent()
Kotlin
@Override fun onNewIntent(@NonNull intent: Intent): Screen { if (intent.getData() != null) { val uri: Uri = intent.getData() // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center" // Build your Templates with parsed uri parameters ... } }
Java
@Override public void onNewIntent(@NonNull Intent intent) { if (intent.getData() != null) { Uri uri = intent.getData(); // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center" // Build your Templates with parsed uri parameters ... } }
預覽、測試及發布應用程式
應用程式動作提供的工具可用於預覽及測試應用程式。如要瞭解此工具,或進一步瞭解如何在 Play 商店中發布支援語音功能的車用應用程式,請參閱「應用程式動作總覽」。