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