車輛應用程式動作

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

應用程式動作可搭配搜尋點 (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. 應用程式處理執行要求,在駕駛人的資訊娛樂系統中顯示充電站選項。

限制

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

相關規定

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

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

確定意圖和執行要求

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

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

    應用程式動作提供預先訓練的語音模型 (稱為內建意圖,簡稱 BII),可在使用者說出「Ok 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 商店中發布支援語音功能的車用應用程式,請參閱「應用程式動作總覽」。