برقراری ارتباط در پس‌زمینه

این راهنما نمای کلی از نحوه پشتیبانی از موارد استفاده کلیدی برای برقراری ارتباط با دستگاه‌های جانبی را زمانی که برنامه شما در پس‌زمینه اجرا می‌شود ارائه می‌دهد:

گزینه‌های متعددی برای پشتیبانی از هرکدام از این موارد استفاده وجود دارد. هرکدام از این روش‌ها مزایا و معایبی دارند که ممکن است آن‌ها را برای نیازهای خاص شما کم‌وبیش مناسب کند.

نمودار زیر نمای ساده‌شده‌ای از راهنمایی‌های این صفحه را نشان می‌دهد:

پیدا کردن دستگاه

ابتدا، برنامه‌تان باید دستگاهی را برای اتصال پیدا کند. برای پیدا کردن دستگاه 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 پشتیبانی شود زیرا برنامه احتمالاً باید برای مدت طولانی به گوش دادن ادامه دهد. بااین‌حال، می‌توانید از سرویس پیش‌زمینه‌ای هم استفاده کنید.

در هر دو مورد، می‌توانید پس‌از پایان فرایند با دنبال کردن دستورالعمل‌های بخش اتصال به دستگاه دوباره متصل شوید.