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

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

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

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

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

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

في الخلفية

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

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

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

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

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

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

في الخلفية

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

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

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

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

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

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

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

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

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

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