Ngoài trải nghiệm nhắn tin cơ bản dựa trên thông báo để đọc và trả lời tin nhắn, Android Auto còn hỗ trợ trải nghiệm nhắn tin phong phú hơn được tạo bằng Thư viện ứng dụng Android cho Ô tô.
Hỗ trợ trải nghiệm nhắn tin dựa trên thông báo
Tất cả ứng dụng hỗ trợ trải nghiệm nhắn tin theo mẫu cũng phải mở rộng thông báo nhắn tin cho Android Auto. Điều này đảm bảo rằng người dùng có thể đọc và trả lời thư mà không cần mở ứng dụng mẫu.
Tạo trải nghiệm nhắn tin theo mẫu
Hãy làm theo hướng dẫn trong bài viết Sử dụng Thư viện ứng dụng Android cho Ô tô và Thêm tính năng hỗ trợ Android Auto vào ứng dụng theo mẫu để bắt đầu xây dựng trải nghiệm theo mẫu của ứng dụng. Sau đó, hãy tham khảo hướng dẫn trên trang này để nắm được các yêu cầu cụ thể đối với ứng dụng nhắn tin có mẫu.
Định cấu hình tệp kê khai của ứng dụng
Để thông báo cho Android Auto về các tính năng của ứng dụng, ứng dụng của bạn phải làm như sau:
Khai báo tính năng hỗ trợ danh mục trong tệp kê khai của bạn
Ứng dụng của bạn cần khai báo androidx.car.app.category.MESSAGING
danh mục ứng dụng cho ô tô trong bộ lọc ý định của CarAppService
.
<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>
Đặt cấp độ API tối thiểu của ứng dụng ô tô
Vì API ConversationItem
chỉ được hỗ trợ trên Car API 7 trở lên, nên bạn cũng nên đặt siêu dữ liệu minCarApiLevel
thành giá trị đó. Hãy xem phần Cấp độ API ứng dụng dành cho ô tô để biết thêm thông tin.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Khai báo chức năng hỗ trợ Android Auto
Trong tệp automotive_app_desc.xml
mà bạn dùng để khai báo tính năng hỗ trợ Android Auto, hãy đảm bảo rằng bạn đã khai báo cả chức năng notification
và template
:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
Nếu có thể đặt ứng dụng làm trình xử lý tin nhắn SMS mặc định, hãy nhớ thêm phần tử <uses>
sau. Nếu không, trình xử lý mặc định tích hợp trong Android Auto sẽ xử lý tin nhắn SMS/MMS đến. Điều này có thể dẫn đến thông báo trùng lặp.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
Hiển thị cuộc trò chuyện
Để hiển thị thông tin tổng quan về các cuộc trò chuyện của người dùng, bạn có thể hiển thị danh sách đối tượng ConversationItem
trong ListTemplate
hoặc SectionedItemTemplate
.
Để mang lại trải nghiệm tốt nhất cho người dùng, bạn nên cung cấp tối đa 5 đến 10 cuộc trò chuyện gần đây nhất hoặc quan trọng nhất, với không quá 5 tin nhắn gần đây nhất cho mỗi cuộc trò chuyện. Điều này giúp cải thiện hiệu suất tải, đảm bảo người dùng thấy nội dung phù hợp nhất và giảm thời gian tương tác.
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()
}
}
Mỗi ConversationItem
tự động hiển thị các thao tác để phát một tin nhắn, đánh dấu tin nhắn đó là đã đọc và để trả lời. Các thao tác đó do ConversationCallbackDelegate
mà bạn cung cấp khi tạo ConversationItem
xử lý.
Nếu ứng dụng của bạn cung cấp lối tắt cuộc trò chuyện, hãy đảm bảo rằng mã nhận dạng được cung cấp khi tạo ConversationItem
giống với mã nhận dạng cho lối tắt của cuộc trò chuyện đó.
Cập nhật cuộc trò chuyện
Khi người dùng gửi và nhận tin nhắn, bạn nên làm mới màn hình của ứng dụng để thêm các tin nhắn mới bằng cách gọi invalidate()
. Xem phần Làm mới nội dung của mẫu.
Để mang lại trải nghiệm tốt nhất cho người dùng, bạn nên giữ thời gian làm mới ở mức 500 mili giây trở xuống. Nếu việc làm mới thường xuyên mất nhiều thời gian hơn, bạn có thể hiển thị trạng thái tải trong khi tải các thư đến.
Đặt mức độ quan trọng của thông báo cho phù hợp
Để giảm sự phân tâm, ứng dụng của bạn nên giảm mức độ quan trọng của thông báo đến khi người dùng đang xem một cuộc trò chuyện tương ứng để thông báo không xuất hiện dưới dạng thông báo quan trọng (HUN).
Bạn có thể theo dõi xem một cuộc trò chuyện có hiển thị hay không bằng cách quan sát vòng đời của Screen
hiển thị cuộc trò chuyện đó. Xem bài viết Vòng đời của màn hình.
Để ngăn thông báo xuất hiện dưới dạng HUN, hãy đặt mức độ ưu tiên thành IMPORTANCE_DEFAULT
trở xuống.
Phân phối ứng dụng nhắn tin có mẫu
Vì chỉ có thể phát hành các ứng dụng hỗ trợ trải nghiệm nhắn tin bằng mẫu lên kênh Kiểm thử nội bộ và Kiểm thử khép kín trên Google Play, nên bạn không nên quảng bá các bản dựng có hỗ trợ kênh Kiểm thử công khai hoặc Bản phát hành chính thức, vì các bản gửi chứa bản dựng trên các kênh đó sẽ bị từ chối.