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

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

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

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

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

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

في الخلفية

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

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

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

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

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

في الخلفية

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

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

البقاء متصلاً بجهاز

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

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

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

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

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

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

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