Android 6.0 Marshmallow 推出了透過 Google 助理等小幫手應用程式,讓使用者與應用程式互動的新方式。助理是頂層視窗,使用者可以查看該視窗,取得目前活動的關聯動作。這些動作可能包含指向裝置上其他應用程式的深層連結。
使用者只要長按主畫面按鈕或說出關鍵字詞,即可啟動 Google 助理。系統會在回應中開啟頂層視窗,顯示與情境相關的動作。
Google 助理等小幫手應用程式,會透過名為「觸控即時資訊」的功能實作 Google 助理疊加視窗,該功能可與 Android 平台層級的功能搭配使用。系統會允許使用者選取助理應用程式,該應用程式會使用 Android 的 Assist API 從您的應用程式取得背景資訊。
本指南說明 Android 應用程式如何使用 Android 的 Assist API 改善助理使用者體驗。如要瞭解如何建立媒體應用程式,以便 Google 助理啟動及控制,請參閱「Google 助理和媒體應用程式」。
使用 Google 助理
圖 1 說明一般的 Google 助理使用者互動。當使用者長按主畫面按鈕時,系統會在「來源」應用程式中叫用 Assist API 回呼 (步驟 1)。Google 助理會算繪重疊視窗 (步驟 2 和 3),然後使用者選取要執行的動作。助理會執行所選動作,例如透過深層連結觸發意圖,前往餐廳應用程式 (目的地) (步驟 4)。
使用者可以依序選取「設定」>「應用程式」>「預設應用程式」>「小幫手與語音輸入」,設定這個助理。使用者可以變更系統選項,例如以文字形式存取螢幕內容和螢幕截圖,如圖 2 所示。
來源應用程式
為確保應用程式使用助理做為使用者的資訊來源,只需遵循無障礙最佳做法即可。本節說明如何提供額外資訊,協助改善 Google 助理使用者體驗,以及需要特殊處理的情境 (例如自訂檢視區塊)。
與 Google 助理分享其他資訊
除了文字和螢幕截圖外,應用程式也可以將其他資訊提供給 Google 助理。舉例來說,音樂應用程式可以選擇傳遞目前專輯資訊,讓 Google 助理能根據目前活動建議更聰明的動作。請注意,Assist API 不提供媒體控制項。如要新增媒體控制項,請參閱「 Google 助理和媒體應用程式」一文。
如要向助理提供額外資訊,應用程式可以註冊應用程式事件監聽器,並使用活動回呼提供活動專屬資訊,如圖 3 所示:
為提供全域應用程式結構定義,應用程式會建立 Application.OnProvideAssistDataListener
的實作項目,並使用 registerOnProvideAssistDataListener()
註冊該項目。為提供活動專屬的情境資訊,活動會覆寫 onProvideAssistData()
和 onProvideAssistContent()
。系統會在之後呼叫可選的全球回呼,以呼叫這兩個活動方法。由於回呼會在主執行緒上執行,因此應盡快完成。只有在活動執行時,系統才會叫用回呼。
提供相關背景
當使用者啟動 Google 助理時,系統會呼叫 onProvideAssistData()
來建構完整的 ACTION_ASSIST
意圖,其中包含以 AssistStructure
例項表示的目前應用程式的所有內容。您可以覆寫這個方法,將任何內容放入套件,以便顯示在輔助意圖的 EXTRA_ASSIST_CONTEXT
部分。
說明內容
應用程式可以實作 onProvideAssistContent()
,藉由提供與目前活動相關的內容參照資料,改善 Google 助理的使用者體驗。您可以透過 JSON-LD 物件,使用 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()
實作來改善使用者體驗,這可提供下列好處:
- 調整所提供的內容意圖,以便更準確反映活動的頂層背景資訊。
- 提供顯示內容的 URI。
- 填入使用者目前查看的其他興趣內容,填入
setClipData()
。
注意: 使用自訂文字選取實作的應用程式,可能需要實作 onProvideAssistContent()
並呼叫 setClipData()
。
預設實作方式
如未實作 onProvideAssistData()
或 onProvideAssistContent()
回呼,系統會繼續執行,並將自動收集的資訊傳遞給助理,除非目前的視窗標記為「安全」。如圖 3 所示,系統會使用 onProvideStructure()
和 onProvideVirtualStructure()
的預設實作項目收集文字和檢視區塊階層資訊。如果您的檢視區塊實作自訂文字繪製,請覆寫 onProvideStructure()
,透過呼叫 setText(CharSequence)
為 Google 助理提供要向使用者顯示的文字。
在大多數情況下,實作無障礙支援服務可讓助理取得所需資訊。如要實作無障礙設計支援,請觀察使應用程式可供存取中所述的最佳做法,包括:
- 提供
android:contentDescription
屬性。 - 針對自訂檢視畫面填入
AccessibilityNodeInfo
。 - 確認自訂
ViewGroup
物件對其子項正確公開。
排除由助理提供的觀看次數
如要處理敏感資訊,應用程式可以設定 WindowManager
的 FLAG_SECURE
版面配置參數,藉此從 Google 助理中排除目前的檢視畫面。您必須為活動建立的每個視窗 (包括對話方塊) 明確設定 FLAG_SECURE
。應用程式也可以使用 setSecure()
將介面排除在 Google 助理之外。目前沒有全域 (應用程式層級) 機制可排除助理中的所有檢視畫面。請注意,FLAG_SECURE
不會導致 Assist API 回呼停止觸發。使用 FLAG_SECURE
的活動仍可透過本指南先前提及的回呼,向 Google 助理應用程式明確提供資訊。
注意: 如果是公司帳戶 (Android for Work),管理員可以使用 DevicePolicyManager
API 的 setScreenCaptureDisabled()
方法,停用工作資料夾的助理資料收集功能。
語音互動
系統也會在偵測到關鍵字時叫用 Assist API 回呼。詳情請參閱 語音動作說明文件。
Z 順序注意事項
助理會使用輕量重疊視窗,顯示在目前活動的頂端。由於使用者隨時可以啟動助理,請勿建立會干擾疊加視窗的永久系統警示視窗,如圖 4 所示。
如果您的應用程式使用 系統快訊視窗,請立即移除,因為這些視窗在畫面上留下會降低使用者體驗。
目標應用程式
助理應用程式通常會利用深層連結找出目的地應用程式。如要讓應用程式成為可能的目的地應用程式,建議您新增深層連結支援。目前使用者情境與深層連結,或疊加視窗中顯示的其他可能動作 (如圖 1 所示) 的比對結果,是 Google 助理的實作專用結果。舉例來說,Google 助理應用程式會使用深層連結和應用程式連結,將流量導向目的地應用程式。
導入自己的 Google 助理
您可以自行實作助理。如圖 2 所示,使用者可以選取使用中的助理應用程式。助理應用程式必須提供 VoiceInteractionSessionService
和 VoiceInteractionSession
的實作,如
此 VoiceInteraction
範例所示。也需要 BIND_VOICE_INTERACTION
權限。接著,助理就能接收文字和檢視區塊階層,並以 onHandleAssist()
中的 AssistStructure
例項表示。透過 onHandleScreenshot()
接收螢幕截圖。