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

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

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

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

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

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

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

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

  • สำหรับ BluetoothLeScanner: ให้เรียกใช้ startScan() ด้วยออบเจ็กต์ PendingIntent แทน ออบเจ็กต์ ScanCallback เพื่อ รับการแจ้งเตือนเมื่อมีการสแกนอุปกรณ์ที่ตรงกับตัวกรองของคุณ (ตัวอย่าง)
  • สำหรับ CompanionDeviceManager: ทำตามคำแนะนำในหัวข้อปลุกแอปที่ใช้ร่วมกันให้ทำงานเพื่อปลุกแอปและทำให้แอปทำงานต่อไปขณะที่อุปกรณ์ที่เชื่อมโยงก่อนหน้านี้อยู่ในระยะสัญญาณ (ตัวอย่าง)

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

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

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

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

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

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

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

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

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

ในทั้ง 2 กรณี คุณจะมีตัวเลือกต่อไปนี้

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

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

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

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

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