除了透過基本通知讀取及回覆訊息,Android Auto 也支援使用 Android for Cars 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>
設定最低車輛應用程式 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 的內部測試和封閉測試群組,因此請勿將包含支援功能的版本升級至公開測試或正式版群組,否則含有這些群組版本的提交內容將遭到拒絕。