除了可用於閱讀及回覆訊息的基本通知訊息體驗,Android Auto 也支援使用 車輛專用 Android App Library 建構的更豐富訊息體驗。
支援通知功能的訊息體驗
所有支援範本式訊息體驗的應用程式,都必須擴充 Android Auto 的訊息通知。這樣一來,使用者不必開啟範本應用程式,也能閱讀及回覆訊息。
建構使用範本的訊息體驗
請按照「使用車輛專用 Android App Library」和「在範本式應用程式中新增對 Android Auto 的支援」中的指示,開始建構應用程式的範本式體驗。接著,請參閱本頁指南,瞭解使用範本訊息應用程式的具體規定。
設定應用程式的資訊清單檔案
如要告知 Android Auto 您的應用程式功能,應用程式必須執行下列操作:
在資訊清單中宣告類別支援
應用程式必須在 CarAppService
的意圖篩選器中宣告 androidx.car.app.category.MESSAGING
車用應用程式類別。
<application>
...
<service
...
android:name=".MyCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.MESSAGING"/>
</intent-filter>
</service>
...
<application>
設定 Car App 的最低 API 級別
由於 ConversationItem
API 僅支援 Car API 7 以上版本,因此您也應將 minCarApiLevel
中繼資料設為該值。詳情請參閱「車輛應用程式 API 級別」。
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
宣告 Android Auto 支援
在您用來宣告 Android Auto 支援的 automotive_app_desc.xml
檔案中,請務必宣告 notification
和 template
功能:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
如果您的應用程式可以設為預設簡訊處理常式,請務必加入以下 <uses>
元素。如果沒加入,系統就會利用 Android Auto 內建的預設處理常式處理收到的簡訊/多媒體訊息,導致重複通知。
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
顯示對話
如要顯示使用者對話的概覽,您可以在 ListTemplate
或 SectionedItemTemplate
中顯示 ConversationItem
物件清單。
為提供最佳使用者體驗,建議您最多提供 5 到 10 則最近或最重要的對話,每則對話最多 5 則最近的訊息。這有助於改善載入效能、確保使用者看到最相關的內容,並縮短互動時間。
class MyMessagingScreen() : Screen() {
override fun onGetTemplate(): Template {
val itemListBuilder = ItemList.Builder()
val conversations: List<MyConversation> = // Retrieve conversations
for (conversation: MyConversation in conversations) {
val carMessages: List<CarMessage> = conversation.getMessages()
.map { message ->
// CarMessage supports additional fields such as MIME type and URI,
// which you should set if available
CarMessage.Builder()
.setSender(message.sender)
.setBody(message.body)
.setReceivedTimeEpochMillis(message.receivedTimeEpochMillis)
.setRead(message.isRead)
.build()
}
itemListBuilder.addItem(
ConversationItem.Builder()
.setConversationCallback { /* Implement your conversation callback logic here */ }
.setId(/* Set conversation ID */)
.setTitle(/* Set conversation title */)
.setIcon(/* Set conversation icon if available */)
.setMessages(carMessages)
/* When the sender of a CarMessage is equal to this Person,
message readout is adjusted to "you said" instead of "<person>
said" */
.setSelf(/* Set self-sender */)
.setGroupConversation(/* Set if the message contains more than 2 participants */)
.build()
)
}
return ListTemplate.Builder()
.setTitle("Conversations")
.setHeaderAction(Action.APP_ICON)
.setSingleList(itemListBuilder.build())
.build()
}
}
每個 ConversationItem
都會自動顯示播放訊息、將訊息標示為已讀以及回覆的動作。這些動作會由您在建構 ConversationItem
時提供的 ConversationCallbackDelegate
處理。
如果您的應用程式提供對話捷徑,請確認建構 ConversationItem
時提供的 ID 與該對話捷徑的 ID 相同。
更新對話
當使用者傳送及接收訊息時,您應呼叫 invalidate()
,藉此重新整理應用程式的畫面,以便納入新訊息。請參閱「重新整理範本內容」。
為提供最佳使用者體驗,建議您將重新整理時間保持在 500 毫秒以下。如果經常重新整理的時間較長,您可以在載入傳入訊息時顯示載入狀態。
適當設定通知重要性
為減少干擾,應用程式應在使用者查看對應對話時,降低傳入通知的重要性,以免通知顯示為快訊通知 (HUN)。
您可以觀察顯示對話的 Screen
生命週期,追蹤對話是否可見。請參閱「螢幕的生命週期」。
如要避免通知顯示為抬頭通知,請將優先順序設為 IMPORTANCE_DEFAULT
以下。
發布使用範本的訊息應用程式
由於支援範本訊息體驗的應用程式只能發布至 Google Play 的內部測試和封閉測試群組,因此您不應將包含支援的版本提交至公開測試或正式版群組,因為這些群組中的提交內容會遭到拒絕。