針對 Google 助理進行上下文最佳化調整

Android 6.0 Marshmallow 推出了透過 Google 助理與應用程式互動的新方式 例如 Google Google 助理。助理是一個頂層視窗,使用者可以查看這個視窗以根據 與目前活動相關的操作這些動作可能包含透過深層連結前往其他應用程式的深層連結 裝置。

使用者長按主畫面按鈕或說出 keyphrase。 為回應,系統會開啟頂層視窗,其中顯示 相關動作

Google 助理等小幫手應用程式,會透過 功能,適用於 Android 平台層級的功能。系統 可讓使用者選取助理應用程式,以從您的應用程式取得關聯資訊 Android 的 Assist API。

本指南說明 Android 應用程式如何使用 Android 的 Assist API 提升助理體驗 使用者體驗瞭解如何建立媒體應用程式,讓 Google 助理啟動 Google 助理 如要控制及控制媒體,請參閱 Google 助理和媒體應用程式

使用 Google 助理

圖 1 說明一般的 Google 助理使用者互動。當使用者長按 則系統會叫用 Assist API 回呼 在來源應用程式中 (步驟 1)。Google 助理會顯示重疊視窗 (步驟 2 和 3)。 然後選取要執行的動作。Google 助理會執行所選動作 例如透過深層連結觸發意圖 (目的地) 餐廳應用程式 (步驟 4)。

圖 1. Google 助理與「觸控即時資訊」功能的互動範例 Google 應用程式

使用者可以選取「設定」> 以設定助理應用程式 >預設應用程式 > 協助與語音輸入。使用者可以變更系統選項,例如存取 將畫面內容顯示為文字並存取螢幕截圖,如圖 2 所示。

圖 2. 協助與語音輸入設定

來源應用程式

為了確保您的應用程式能與 Google 助理搭配使用,做為使用者的資訊來源, 只需遵循最佳無障礙設計 做法。本節說明如何提供其他資訊 提升助理使用體驗和情境 需要特殊處理的物件,例如自訂 View

分享其他資訊 連結 Google 助理

除了文字和螢幕截圖外,應用程式還可以分享 提供其他資訊例如你的音樂 應用程式可以選擇傳送目前的相簿資訊,讓 Google 助理可以 建議根據目前活動制定更明智的決策。請注意,Assist API 不提供媒體控制項。如要新增媒體控制項,請參閱 Google 助理和媒體應用程式

如要為助理提供額外資訊,應用程式會提供 全域應用程式結構定義,方法是註冊應用程式事件監聽器, 可透過活動回呼提供活動專屬資訊,如 圖 3:

圖 3. Assist API 生命週期序列圖

為提供全域的應用程式情境,應用程式會建立 並註冊 Application.OnProvideAssistDataListener 使用 registerOnProvideAssistDataListener()。 為了提供與活動相關的情境資訊,活動 覆寫 onProvideAssistData()onProvideAssistContent()。 這兩個活動方法會在選用的全域類型「之後」呼叫 回呼方法。由於回呼是在主執行緒上執行,因此 完成提示。 系統只會在活動執行時叫用回呼。

提供相關背景

使用者啟用 Google 助理時, 呼叫 onProvideAssistData() 以建構完整的 ACTION_ASSIST 意圖,搭配 目前的應用程式,以 AssistStructure 的例項表示。您可以覆寫這個方法 任何檔案都可以顯示在 輔助意圖的 EXTRA_ASSIST_CONTEXT 部分。

說明內容

應用程式可以實作 onProvideAssistContent() 提供與內容相關的參考資料,改善 Google 助理的使用者體驗 與目前活動有關你可以使用以下語言描述應用程式內容: Schema.org 定義的常見詞彙 讀取及寫入路徑在以下範例中,音樂應用程式 結構化資料,描述使用者目前播放的音樂專輯 檢視:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

您也可以透過自訂實作 onProvideAssistContent(), 享受以下好處:

注意: 如果應用程式採用自訂文字選取功能,則可能需要 以實作 onProvideAssistContent() 並呼叫 setClipData()

預設實作方式

如果 onProvideAssistData()onProvideAssistContent() 皆非 就算實作回呼,系統還是會繼續進行並將 自動收集的資訊並傳送給小幫手 (除非現有 視窗遭標記為「安全」。 如圖 3 所示,系統會使用 onProvideStructure()onProvideVirtualStructure() 的預設實作執行以下作業: 收集文字和檢視區塊階層資訊。如果檢視區塊已導入 文字繪製,覆寫 onProvideStructure() 以便提供 用來向 Google 助理呼叫 setText(CharSequence),向使用者顯示的文字。

在大多數情況下,導入無障礙設計支援後 取得所需資訊如要實作無障礙支援 請參考建構應用程式 可存取,包括:

排除助理的觀看次數

為處理機密資訊,應用程式可以將目前的檢視畫面從 Google 助理中排除 設定 WindowManagerFLAG_SECURE 版面配置參數。您必須針對以下項目明確設定 FLAG_SECURE: 由活動建立的每個視窗,包括對話方塊。您的應用程式也能使用 setSecure():排除 開啟 Google 助理的介面由於沒有 通用 (應用程式層級) 機制來排除助理的所有資料檢視。注意事項 該 FLAG_SECURE 不會導致 Assist API 回呼停止 以及提示使用 FLAG_SECURE 的活動仍可明確 透過前述的回呼向 Google 助理應用程式提供資訊 本指南。

注意: 如果是公司帳戶 (Android for Work), 管理員可以停用 使用 DevicePolicyManager API 的 setScreenCaptureDisabled() 方法收集工作資料夾的助理資料。

語音互動

也會在發生以下情況時叫用 Assist API 回呼: 鍵盤語句 偵測。詳情請參閱 語音 動作說明文件。

Z 順序注意事項

Google 助理會使用顯示在網頁上方的精簡重疊視窗 目前的活動使用者可以隨時啟動助理 不要建立永久性 系統快訊視窗,以及乾擾重疊視窗運作,如 圖 4.

圖 4. 輔助圖層 Z 順序

如果應用程式使用 系統快訊視窗,請務必移除這些視窗,因為這些視窗留在 螢幕會降低使用者體驗

目標應用程式

Google 助理應用程式通常會使用深層連結尋找目的地應用程式。若要 如果應用程式可能是目的地應用程式,建議您新增深層連結支援。比對 目前使用者情境和深層連結之間,或小工具中顯示的其他潛在動作 重疊視窗 (如圖 1 中的步驟 3 所示) 是 Google 助理的實作專用視窗。 適用對象 舉例來說,Google 助理應用程式會使用深層連結和應用程式連結: 將流量導向目的地應用程式

導入自己的 Google 助理

建議您導入專屬助理。如圖所示 2,使用者可以選取啟用的助理應用程式。 助理應用程式必須實作 VoiceInteractionSessionServiceVoiceInteractionSession,如 所示 這個 VoiceInteraction 範例。此外,您也必須具備 BIND_VOICE_INTERACTION 權限。小幫手就能 接收表示為 onHandleAssist()AssistStructure 執行個體的文字和檢視區塊階層。 應用程式會透過 onHandleScreenshot() 接收螢幕截圖。