車輛應用程式動作

語音控制可讓駕駛人執行工作,而不用放開緊握方向盤上的雙手或將視線從緊盯著前方路況移出。車輛應用程式的應用程式動作可讓駕駛人使用 Google 助理控管資訊娛樂系統上的 Android 應用程式,只要說出「Hey Google, find street parking on ExampleApp」之類的指令即可。

應用程式動作可搭配搜尋點 (POI) 車輛應用程式使用。本指南說明將應用程式動作整合至搜尋點應用程式的具體需求和限制。

運作方式

應用程式動作會將您的應用程式內功能延伸至 Google 助理,讓使用者可以透過語音存取應用程式的功能。當使用者叫用應用程式動作時,Google 助理會比對查詢您在 shortcuts.xml 資源中宣告的內建意圖 (BII),然後在要求的畫面啟動應用程式。

您可在應用程式中使用 Android capability 宣告支援 BII。使用 Google Play 管理中心上傳應用程式時,Google 會註冊應用程式中宣告的功能,讓使用者透過 Google 助理存取這些功能。

顯示車輛執行要求的圖表。

  1. 使用者觸發 Google 助理,並針對特定應用程式提出語音要求。
  2. Google 助理會比對預先訓練模型 (BII) 的要求,並擷取 BII 支援的任何參數。
  3. 在此範例中,Google 助理會比對查詢 GET_CHARGING_STATION BII、擷取位置參數「SFO」,然後將位置轉譯成其地理區域座標。
  4. 透過此 BII 的執行要求定義來觸發應用程式。
  5. 應用程式會處理執行要求,並在駕駛人的資訊娛樂系統中顯示充電站選項。

限制

應用程式動作的車輛實作有下列限制:

相關規定

請執行下列應用程式動作步驟,準備車輛應用程式:

確定意圖和執行要求

透過應用程式動作以語音啟用車輛應用程式的第一步,就是確定應用程式支援哪些使用者語音指令 (或「意圖」)。然後為每個意圖定義執行要求,以指定應用程式如何滿足要求。

  • 您的車輛應用程式支援哪些意圖?

    應用程式動作提供預先訓練的語音模型 (稱為內建意圖,BII),可在使用者說出「Hey Google」時瞭解並解讀使用者的語音指令。如要回應語音要求,您只需向 Google 助理宣告應用程式支援的 BII。舉例來說,想要應用程式協助尋找停車設施,可以實作 GET_PARKING_FACILITY BII。或實作 GET_CHARGING_STATION BII,以協助使用者尋找電動車充電站。

  • 您的應用程式如何滿足每個意圖?

    您的應用程式會啟動至適當的畫面,以滿足語音要求。應用程式動作則會提供執行要求 (具有從使用者要求擷取的參數),讓您根據使用者的需求量身定制回應。

整合應用程式動作

確定執行要求策略後,請按照下列步驟透過語音啟用車輛應用程式:

  1. 開啟主要活動 AndroidManifest.xml,並宣告 Android 捷徑的支援。您可以使用 capability 捷徑元素,向 Google 助理宣告應用程式支援的 BII。詳情請參閱新增功能

     <!-- AndroidManifest.xml -->
     <meta-data
         android:name="android.app.shortcuts"
         android:resource="@xml/shortcuts" />
    
  2. 然後在 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>
    
  3. 如果在應用程式 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>
    
  4. 最後更新汽車應用程式的 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 商店中發布支援語音功能的車輛應用程式,請參閱應用程式動作總覽