車輛應用程式動作

藉由語音控制,駕駛人執行工作時就能專心注意路況,不必放開方向盤。車用應用程式有專屬的應用程式動作,可讓駕駛人使用 Gemini 或 Google 助理控管資訊娛樂系統上的 Android 應用程式,只要說出「Ok Google,使用範例應用程式找路邊車位」這類指令就行了。

應用程式動作可搭配搜尋點 (POI) 車輛應用程式使用。本指南介紹了將應用程式動作整合至搜尋點應用程式時,需注意的具體需求和限制。

運作方式

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

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

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

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

限制

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

相關規定

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

  • 遵守一般 Android 應用程式執行應用程式動作時的相關規定
  • 加入 Car App Library 依附元件。詳情請參閱「宣告依附元件」。

確定意圖和執行要求

如要利用應用程式動作,以語音方式啟用車用應用程式,第一步是需確定應用程式支援哪些使用者語音指令 (或稱「意圖」)。第二步是為每項意圖定義執行要求,指定應用程式應如何滿足要求。

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

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

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

    您的應用程式會啟動到適當的畫面,藉此執行語音要求。應用程式動作會為執行要求提供擷取自使用者要求的參數,讓您根據使用者需求量身打造回應內容。

整合應用程式動作

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

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

     <!-- AndroidManifest.xml -->
     <meta-data
         android:name="android.app.shortcuts"
         android:resource="@xml/shortcuts" />
    
  2. 接著,在 AndroidManifest.xml 中新增 <intent-filter> 元素。這樣做可讓 Gemini 或 Google 助理使用深層連結連線到應用程式內容。

    • 如果是 Android Auto 執行要求,<intent-filter> 會與行動應用程式相同。

    • 如果是 Android Automotive OS,應用程式的 CarAppService 工作階段會觸發 Gemini 或 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 商店中發布支援語音功能的車用應用程式,請參閱「應用程式動作總覽」。