กำหนดค่าโฮสต์ AppCard

ใช้ AppCardHost เพื่อสื่อสารกับแอปที่แสดง AppCard

สิทธิ์

แอปที่ใช้ AppCardHost ต้องมีสิทธิ์ต่อไปนี้

  • android.permission.INTERACT_ACROSS_USERS_FULL
  • android.permission.QUERY_ALL_PACKAGES
  • (ใน API ระดับ 34 ขึ้นไปเท่านั้น) android.car.permission.BIND_APP_CARD_PROVIDER

เริ่มต้น

หากต้องการเริ่มต้นใช้งานโฮสต์ ให้ระบุข้อมูลต่อไปนี้

  • บริบท
  • updateRate อัตราการอัปเดต AppCard เป็นมิลลิวินาที
  • fastUpdateRate อัตราการอัปเดตเป็นมิลลิวินาทีสําหรับคอมโพเนนต์ที่ติดแท็กด้วย EnforceFastUpdateRate
  • responseExecutor ชุดข้อความที่คุณต้องการรับการตอบกลับจากแอป AppCard

การออกแบบ

คุณสามารถโต้ตอบกับ AppCardHost ได้ 2 วิธีดังนี้

หรือ

AppCardListener

คอมโพเนนต์ AppCardListener จะลงทะเบียนกับ AppCardHost เพื่อรับการอัปเดตการสื่อสารจากแอป AppCardHost และแอป AppCard ดูรายละเอียดฟังก์ชันอินเทอร์เฟซของ AppCardListener ได้ที่นี่

fun onAppCardReceived(AppCardContainer)

ฟังก์ชันนี้จะทริกเกอร์เมื่อได้รับ AppCard จากแอป โดยจะส่งเป็น AppCardContainer ซึ่งระบุ AppCard และ appIdentifier เพื่อระบุแอปที่ส่ง AppCard

fun onComponentReceived(AppCardComponentContainer)

ฟังก์ชันนี้จะทริกเกอร์เมื่อได้รับคอมโพเนนต์ AppCard จากแอป โดยระบบจะส่งเป็น AppCardComponentContainer ซึ่งให้คอมโพเนนต์ AppCard, Identifier เพื่อระบุแอปที่ส่ง AppCard และรหัสสตริงเพื่อชี้ไปยัง AppCard ที่คอมโพเนนต์นั้นเกี่ยวข้อง

fun onProviderRemoved(String, String?)

ฟังก์ชันนี้จะทริกเกอร์เมื่อนำผู้ให้บริการ AppCard ออกหรือปิดใช้ ใช้วิธีนี้เพื่อล้าง AppCard ที่ใช้งานอยู่ซึ่งเกี่ยวข้องกับชื่อแพ็กเกจและสิทธิ์ของผู้ให้บริการที่ระบุ

หากมีสิทธิ์เป็น {@code null} แสดงว่าระบบนําทั้งแพ็กเกจออกแล้ว

fun onProviderAdded(String, String?)

ฟังก์ชันนี้จะทริกเกอร์เมื่อมีการเพิ่มหรือเปิดใช้ผู้ให้บริการ AppCard

ตัวอย่างการใช้งาน ใช้ฟังก์ชันนี้เป็นทริกเกอร์เพื่อรีเฟรช AppCard ทั้งหมดที่ใช้ได้ในตัวเลือก AppCard หากมีสิทธิ์เป็น {@code null} แสดงว่ามีการเพิ่มทั้งแพ็กเกจ

fun onPackageCommunicationError(appIdentifier, Throwable)

ฟังก์ชันนี้จะทริกเกอร์เมื่อ AppCardHost พบข้อผิดพลาดขณะสื่อสารกับผู้ให้บริการ AppCard

ตัวอย่างการใช้งาน ใช้วิธีการนี้เพื่อแสดงให้ผู้ใช้ทราบว่า AppCard ที่เลือกพบข้อผิดพลาด

API

fun refreshCompatibleapp()

ควรเรียกใช้เมธอดนี้ทุกครั้งที่กิจกรรมที่ใช้โฮสต์กลับมาทำงานอีกครั้งเพื่อให้โฮสต์รีเฟรชรายการแอปที่รองรับ AppCard ได้

fun destroy()

เรียกใช้เมธอดนี้เมื่อกิจกรรมที่ใช้โฮสต์ถูกทำลายเพื่อให้โฮสต์ล้างการเชื่อมต่อและสมาชิกภายในทั้งหมด

fun registerListener(AppCardListener)

ใช้เพื่อลงทะเบียน AppCardListener

fun unregisterListener(AppCardListener)

ใช้ยกเลิกการลงทะเบียน AppCardListener

fun getAllAppCards(AppCardContext)

เรียกใช้เมธอดนี้เพื่อระบุ AppCardListener ที่ลงทะเบียนไว้พร้อม AppCard ทั้งหมดที่มีให้ในระบบด้วย AppCardContext ที่ระบุ ซึ่งจะให้คำแนะนำแก่ผู้ให้บริการเกี่ยวกับวิธีจัดโครงสร้าง AppCard

fun requestAppCard(AppCardContext, appIdentifier, String)

เรียกใช้เมธอดนี้เพื่อระบุ AppCard ที่เฉพาะเจาะจงให้กับ AppCardListener ที่ลงทะเบียน โดยให้ AppCardContext ที่บอกคำแนะนำแก่ผู้ให้บริการเกี่ยวกับวิธีจัดโครงสร้าง AppCard

fun notifyAppCardRemoved(appIdentifier, String)

แจ้งให้ผู้ให้บริการ AppCard ทราบว่า AppCard ของผู้ให้บริการดังกล่าวไม่ทำงานแล้ว

fun notifyAppCardInteraction(appIdentifier, String, String, String)

แจ้งผู้ให้บริการ AppCard ว่ามีการโต้ตอบกับ AppCard ของผู้ให้บริการ การโต้ตอบที่รองรับเพียงอย่างเดียวคือการคลิกปุ่ม ซึ่งแสดงด้วย AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK

เราขอแนะนำให้สร้างปุ่มสำหรับ AppCard ที่มี onClick Listener ที่เรียกใช้ฟังก์ชันนี้ด้วย appIdentifier, รหัส AppCard, รหัสคอมโพเนนต์ และรหัสการโต้ตอบ

fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)

ส่งการอัปเดต AppCardContext สำหรับ AppCard ที่เฉพาะเจาะจง เช่น เมื่อเปลี่ยนจากโหมดเข้าเกียร์ว่างเป็นโหมดขับเคลื่อน ให้ใช้วิธีนี้เพื่อส่งAppCardContextการอัปเดตโดยตั้งค่า isInteractable เป็น false สําหรับ AppCard ที่ใช้งานอยู่แต่ละรายการ

คำถามที่พบบ่อย

  1. ฉันจะดูตัวอย่างการใช้งานได้จากที่ใด

    • โฮสต์ตัวอย่าง แสดง AppCard ทั้งหมดที่ใช้ได้ของระบบ พร้อมกับความสามารถในการทดสอบ

    • DriverUI และเครื่องมือจัดการ Pano Pano Manager จะทำหน้าที่เป็นตัวเลือก ส่วน DriverUI จะทำหน้าที่เป็นผู้นำเสนอ

  2. AppCardContentProvider แต่ละรายการรองรับ AppCard ได้กี่รายการ

    AppCardContentProvider รองรับ AppCard ได้ไม่จำกัดจำนวน อย่างไรก็ตาม อย่าลืมรักษาสมดุลระหว่างจำนวน AppCard กับประสิทธิภาพที่ลดลงเทียบกับประสบการณ์การใช้งานที่ดีของผู้ใช้