นอกจากประสบการณ์การรับส่งข้อความแบบพื้นฐานที่ทำงานด้วยระบบการแจ้งเตือนสำหรับการอ่านและตอบกลับข้อความแล้ว Android Auto ยังรองรับประสบการณ์การรับส่งข้อความที่สมบูรณ์ยิ่งขึ้นซึ่งสร้างขึ้นโดยใช้ไลบรารีแอป Android สำหรับรถยนต์
รองรับประสบการณ์การรับส่งข้อความที่ทำงานด้วยระบบการแจ้งเตือน
แอปทั้งหมดที่รองรับประสบการณ์การรับส่งข้อความที่ใช้เทมเพลตต้องขยายการแจ้งเตือนการรับส่งข้อความสำหรับ Android Auto ด้วย วิธีนี้ช่วยให้ผู้ใช้อ่านและตอบกลับข้อความได้โดยไม่ต้องเปิดแอปเทมเพลต
สร้างประสบการณ์การรับส่งข้อความที่ใช้เทมเพลต
ทำตามคำแนะนำในใช้ไลบรารีแอป Android สำหรับรถยนต์และเพิ่มการรองรับ Android Auto ลงในแอปที่ใช้เทมเพลตเพื่อเริ่มต้นสร้างประสบการณ์การใช้งานเทมเพลตของแอป จากนั้นดูคําแนะนําในหน้านี้เพื่อทําความเข้าใจข้อกําหนดเฉพาะสําหรับแอปรับส่งข้อความที่มีเทมเพลต
กำหนดค่าไฟล์ Manifest ของแอป
หากต้องการแจ้งให้ Android Auto ทราบถึงความสามารถของแอป แอปของคุณต้องทำดังนี้
ประกาศการรองรับหมวดหมู่ในไฟล์ Manifest
แอปของคุณต้องประกาศandroidx.car.app.category.MESSAGING
หมวดหมู่แอปรถยนต์ในตัวกรอง Intent ของ 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>
ตั้งค่าระดับ API ขั้นต่ำของแอปรถยนต์
เนื่องจาก CarAPI 7 ขึ้นไปเท่านั้นที่รองรับ ConversationItem
API คุณจึงควรตั้งค่าข้อมูลเมตา minCarApiLevel
เป็นค่าดังกล่าวด้วย ดูข้อมูลเพิ่มเติมได้ที่ระดับ Car App API
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
ประกาศการรองรับ Android Auto
ในไฟล์ automotive_app_desc.xml
ที่คุณใช้ประกาศการรองรับ Android Auto ให้ตรวจสอบว่าได้ประกาศความสามารถทั้ง notification
และ template
แล้ว
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
หากแอปสามารถตั้งค่าเป็นตัวแฮนเดิล SMS เริ่มต้นได้ ให้ตรวจสอบว่าได้ใส่องค์ประกอบ <uses>
ต่อไปนี้ หากไม่ตั้งค่า ระบบจะใช้ตัวแฮนเดิลเริ่มต้นที่มีอยู่ใน Android Auto เพื่อจัดการข้อความ SMS/MMS ขาเข้า ซึ่งอาจทําให้เกิดการแจ้งเตือนซ้ำ
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
แสดงการสนทนา
หากต้องการแสดงภาพรวมการสนทนาของผู้ใช้ คุณสามารถแสดงรายการออบเจ็กต์ ConversationItem
ใน ListTemplate
หรือ SectionedItemTemplate
เราขอแนะนำให้แสดงการสนทนาล่าสุดหรือสำคัญที่สุดไม่เกิน 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
แต่ละรายการจะแสดงการดำเนินการสำหรับการเล่นข้อความ การทำเครื่องหมายว่าอ่านแล้ว และการตอบโดยอัตโนมัติ การดำเนินการเหล่านั้นจะจัดการโดย ConversationCallbackDelegate
ที่คุณระบุเมื่อสร้าง ConversationItem
หากแอปมีทางลัดการสนทนา ให้ตรวจสอบว่ารหัสที่ระบุเมื่อสร้าง ConversationItem
นั้นตรงกับรหัสของทางลัดการสนทนานั้น
อัปเดตการสนทนา
เมื่อผู้ใช้ส่งและรับข้อความ คุณควรรีเฟรชหน้าจอของแอปเพื่อรวมข้อความใหม่โดยเรียกใช้ invalidate()
ดูรีเฟรชเนื้อหาของเทมเพลต
เราขอแนะนำให้รีเฟรชทุก 500 มิลลิวินาทีหรือน้อยกว่าเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด หากการรีเฟรชบ่อยๆ ใช้เวลานานขึ้น คุณสามารถแสดงสถานะการโหลดขณะโหลดข้อความขาเข้าได้
ตั้งค่าความสำคัญของการแจ้งเตือนตามความเหมาะสม
แอปควรลดความสำคัญของการแจ้งเตือนขาเข้าเมื่อผู้ใช้กำลังดูการสนทนาที่เกี่ยวข้องเพื่อให้การแจ้งเตือนไม่ปรากฏเป็นข้อความแจ้งเตือน Heads Up (HUN) ทั้งนี้เพื่อลดความกระจัดกระจาย
คุณสามารถติดตามได้ว่าการสนทนาจะแสดงหรือไม่โดยดูที่วงจรของ Screen
ที่แสดงการสนทนา โปรดดูวงจรชีวิตของหน้าจอ
หากไม่ต้องการให้การแจ้งเตือนปรากฏเป็น HUN ให้ตั้งค่าลําดับความสําคัญเป็น IMPORTANCE_DEFAULT
หรือต่ำกว่า
เผยแพร่แอปรับส่งข้อความที่มีเทมเพลต
เนื่องจากแอปที่รองรับประสบการณ์การรับส่งข้อความที่ใช้เทมเพลตจะเผยแพร่ในแทร็กการทดสอบภายในและการทดสอบแบบปิดใน Google Play เท่านั้น คุณจึงไม่ควรโปรโมตบิลด์ที่รองรับแทร็กการทดสอบแบบเปิดหรือแทร็กเวอร์ชันที่ใช้งานจริง เนื่องจากการส่งที่มีบิลด์ในแทร็กเหล่านั้นจะถูกปฏิเสธ