สื่อสารในเบื้องหลัง

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

กรณีการใช้งานแต่ละรายการมีตัวเลือกหลายรายการที่รองรับ แต่ละวิธีมีทั้งข้อดีและข้อเสียที่อาจทําให้เหมาะกับความต้องการเฉพาะของคุณมากหรือน้อย

แผนภาพต่อไปนี้แสดงมุมมองแบบง่ายของคําแนะนําในหน้านี้

ค้นหาอุปกรณ์

ก่อนอื่น แอปต้องค้นหาอุปกรณ์ที่จะเชื่อมต่อ หากต้องการค้นหาอุปกรณ์ BLE คุณสามารถใช้ API ต่อไปนี้

ในเบื้องหลัง

ไม่มีข้อจำกัดในการใช้ API เหล่านี้ขณะที่แอปไม่แสดง แต่ทั้ง 2 API จำเป็นต้องมีกระบวนการของแอปทำงานอยู่ หากกระบวนการของแอปไม่ทำงาน คุณสามารถใช้วิธีแก้ปัญหาชั่วคราวต่อไปนี้

เชื่อมต่อกับอุปกรณ์

หากต้องการเชื่อมต่อกับอุปกรณ์หลังจากที่พบแล้ว คุณจะต้องรับอินสแตนซ์ BluetoothDevice ของอุปกรณ์จากแหล่งที่มาแหล่งใดแหล่งหนึ่งต่อไปนี้

หลังจากมีอินสแตนซ์ BluetoothDevice แล้ว คุณสามารถเริ่มคําขอเชื่อมต่อกับอุปกรณ์ที่เกี่ยวข้องได้โดยเรียกใช้เมธอดใดเมธอดหนึ่งจาก connectGatt() ค่าที่คุณส่งไปยังบูลีน autoConnect จะกำหนดว่าไคลเอ็นต์ GATT ใช้โหมดการเชื่อมต่อใดใน 2 โหมดต่อไปนี้

  • เชื่อมต่อโดยตรง (autoconnect = false): พยายามเชื่อมต่อกับอุปกรณ์ต่อพ่วงโดยตรง และดำเนินการไม่สำเร็จหากอุปกรณ์ไม่พร้อมใช้งาน ในกรณีที่การเชื่อมต่อขาดการเชื่อมต่อ ไคลเอ็นต์ GATT จะไม่พยายามเชื่อมต่อใหม่โดยอัตโนมัติ
  • เชื่อมต่ออัตโนมัติ (autoconnect = true): พยายามเชื่อมต่อกับอุปกรณ์ต่อพ่วงโดยอัตโนมัติทุกครั้งที่พร้อมใช้งาน ในกรณีที่อุปกรณ์ต่อพ่วงเป็นผู้เริ่มยกเลิกการเชื่อมต่อหรืออุปกรณ์ต่อพ่วงอยู่นอกระยะสัญญาณ ไคลเอ็นต์ GATT จะพยายามเชื่อมต่อใหม่โดยอัตโนมัติเมื่ออุปกรณ์ต่อพ่วงพร้อมใช้งาน

ในเบื้องหลัง

การเชื่อมต่อกับอุปกรณ์ขณะที่แอปทำงานอยู่เบื้องหลังนั้นไม่มีข้อจำกัด แม้ว่าการเชื่อมต่อจะปิดลงหากกระบวนการถูกยกเลิกก็ตาม นอกจากนี้ ยังมีข้อจํากัดในการเริ่มกิจกรรม (ใน Android 10 ขึ้นไป) หรือบริการที่ทำงานอยู่เบื้องหน้า (ใน Android 12 ขึ้นไป) จากเบื้องหลัง

ดังนั้น หากต้องการดำเนินการเชื่อมต่อขณะอยู่ในเบื้องหลัง แอปจะใช้โซลูชันต่อไปนี้ได้

เชื่อมต่อกับอุปกรณ์ตลอดเวลา

โดยหลักการแล้ว แอปควรเชื่อมต่อกับอุปกรณ์ต่อพ่วงเฉพาะเท่าที่จำเป็น และตัดการเชื่อมต่อเมื่องานเสร็จสมบูรณ์ อย่างไรก็ตาม มี 2 กรณีที่แอปอาจต้องรักษาการเชื่อมต่อไว้อย่างไม่มีกำหนด ดังนี้

ตัวเลือกที่ใช้ได้มีดังนี้สำหรับทั้ง 2 กรณี

ขณะสลับไปมาระหว่างแอป

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

ขณะฟังการแจ้งเตือนจากอุปกรณ์ต่อพ่วง

หากต้องการฟังการแจ้งเตือนจากอุปกรณ์ต่อพ่วง แอปต้องเรียกใช้ setCharacteristicNotification(), ฟังการเรียกกลับโดยใช้ onCharacteristicChanged() และเชื่อมต่อไว้ สําหรับแอปส่วนใหญ่ การสนับสนุน Use Case นี้ด้วย CompanionDeviceService จะเป็นทางเลือกที่ดีที่สุด เนื่องจากแอปอาจต้องฟังเสียงอย่างต่อเนื่องเป็นเวลานาน แต่คุณก็ใช้บริการที่ใช้งานอยู่ได้เช่นกัน

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