التواصل في الخلفية

يقدّم هذا الدليل نظرة عامة على كيفية إتاحة حالات الاستخدام الرئيسية للتواصل مع الأجهزة الملحقة عندما يكون تطبيقك قيد التشغيل في الخلفية:

تتوفّر خيارات متعدّدة لتلبية كل حالة من حالات الاستخدام هذه. لكل منها مزايا وعيوب قد تجعلها أكثر أو أقل ملاءمة لاحتياجاتك المحددة.

يعرض المخطّط البياني التالي نظرة عامة مبسّطة على الإرشادات الواردة في هذه الصفحة:

العثور على جهاز

أولاً، يحتاج تطبيقك إلى العثور على جهاز للاتصال به. للعثور على جهاز BLE، يمكنك استخدام إحدى واجهات برمجة التطبيقات التالية:

في الخلفية

ما مِن قيود على استخدام أي من واجهتَي برمجة التطبيقات هاتين عندما لا يكون التطبيق مرئيًا، ولكن يجب أن تكون عملية التطبيق نشطة. إذا لم تكن عملية التطبيق قيد التشغيل، يمكنك استخدام الحلول البديلة التالية:

  • بالنسبة إلى BluetoothLeScanner: يمكنك استدعاء startScan() باستخدام عنصر PendingIntent بدلاً من عنصر ScanCallback لتلقّي إشعار عند فحص جهاز يتطابق مع الفلتر. (عيّنة)
  • بالنسبة إلى CompanionDeviceManager: اتّبِع الإرشادات الواردة في مقالة إبقاء التطبيقات المصاحبة نشطة لتنشيط التطبيق وإبقائه نشطًا عندما يكون الجهاز المرتبط به سابقًا ضمن النطاق. (عيّنة)

الاتصال بجهاز

للاتصال بجهاز بعد العثور عليه، يجب الحصول على مثيل BluetoothDevice للجهاز من أحد المصادر التالية:

بعد الحصول على مثيل BluetoothDevice، يمكنك بدء طلب اتصال بالجهاز المقابل من خلال استدعاء إحدى طرق connectGatt(). تحدّد القيمة التي يتم تمريرها إلى القيمة المنطقية autoConnect أيّ من وضعي الاتصال التاليين يستخدمهما عميل GATT:

  • الاتصال المباشر (autoconnect = false): يحاول الاتصال بالجهاز الملحق مباشرةً، ويفشل إذا لم يكن الجهاز متاحًا. وفي حال انقطاع الاتصال، لا يحاول عميل GATT إعادة الاتصال تلقائيًا.
  • الاتصال التلقائي (autoconnect = true): يحاول الاتصال تلقائيًا بالجهاز الملحق كلما كان متاحًا. في حال قطع الاتصال من قِبل الجهاز الملحق أو بسبب خروج الجهاز الملحق عن النطاق، يحاول عميل GATT تلقائيًا إعادة الاتصال عندما يصبح الجهاز الملحق متاحًا.

في الخلفية

ما مِن قيود على الاتصال بجهاز أثناء تشغيل التطبيق في الخلفية، ولكن يتم إغلاق الاتصال إذا تم إنهاء العملية. بالإضافة إلى ذلك، هناك قيود على بدء الأنشطة (في Android 10 والإصدارات الأحدث) أو الخدمات التي تعمل في المقدّمة (في Android 12 والإصدارات الأحدث) من الخلفية.

وبالتالي، لإجراء اتصال أثناء العمل في الخلفية، يمكن للتطبيقات استخدام الحلول التالية:

البقاء على اتصال بجهاز

من الأفضل أن تحافظ التطبيقات على اتصالاتها بالأجهزة الملحقة فقط طالما كان ذلك ضروريًا، وأن تفصلها بمجرد اكتمال المهمة. ومع ذلك، هناك حالتان قد يحتاج فيهما التطبيق إلى إبقاء الاتصال نشطًا إلى أجل غير مسمى:

في كلتا الحالتَين، تتوفّر الخيارات التالية:

أثناء التبديل بين التطبيقات

يستغرق العثور على جهاز والاتصال به ونقل البيانات وقتًا طويلاً ويستهلك الكثير من الموارد. لتجنُّب فقدان الاتصال والاضطرار إلى تنفيذ العملية بالكامل في كل مرة يبدّل فيها المستخدم بين التطبيقات أو ينفّذ مهامًا متزامنة، يجب إبقاء الاتصال نشطًا حتى تنتهي العملية. يمكنك استخدام خدمة تعمل في المقدّمة من النوع connectedDevice أو واجهة برمجة تطبيقات حضور الجهاز المصاحب.

أثناء الاستماع إلى إشعارات الأجهزة الملحقة

للاستماع إلى إشعارات الأجهزة الملحقة، يجب أن يستدعي التطبيق setCharacteristicNotification()، والاستماع إلى عمليات الاستدعاء باستخدام onCharacteristicChanged()، والحفاظ على الاتصال نشطًا. بالنسبة إلى معظم التطبيقات، من الأفضل إتاحة حالة الاستخدام هذه باستخدام CompanionDeviceService لأنّ التطبيق سيحتاج على الأرجح إلى مواصلة الاستماع لفترات طويلة. ومع ذلك، يمكنك أيضًا استخدام خدمة تعمل في المقدّمة.

في كلتا الحالتين، يمكنك إعادة الاتصال بعد إنهاء العملية باتّباع التعليمات الواردة في قسم الاتصال بجهاز.