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

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

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

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

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

ابتدا، برنامه شما باید دستگاهی را برای اتصال پیدا کند. برای پیدا کردن یک دستگاه BLE می توانید از یکی از API های زیر استفاده کنید:

در پس زمینه

هیچ محدودیتی برای استفاده از هر یک از این API ها در حالی که برنامه قابل مشاهده نیست وجود ندارد، اما هر دوی آنها برای زنده بودن به فرآیند برنامه شما نیاز دارند. اگر فرآیند برنامه اجرا نمی شود، می توانید از راه حل های زیر استفاده کنید:

  • برای BluetoothLeScanner : با یک شی PendingIntent به جای شیء ScanCallback با startScan() تماس بگیرید تا وقتی دستگاهی که با فیلتر شما مطابقت دارد اسکن شود مطلع شوید. ( نمونه )
  • برای CompanionDeviceManager : دستورالعمل‌های موجود در Keep companion apps awake را دنبال کنید تا برنامه را بیدار کنید و زمانی که دستگاه مرتبط قبلی در محدوده است، برنامه را بیدار نگه دارید. ( نمونه )

به یک دستگاه متصل شوید

برای اتصال به یک دستگاه پس از یافتن آن، باید یک نمونه BluetoothDevice دستگاه را از یکی از منابع زیر دریافت کنید:

پس از اینکه یک نمونه BluetoothDevice داشتید، می توانید با فراخوانی یکی از متدهای connectGatt() درخواست اتصال به دستگاه مربوطه را شروع کنید. مقداری که به بولین autoConnect ارسال می کنید، مشخص می کند که کلاینت GATT از کدام یک از دو حالت اتصال زیر استفاده می کند:

  • اتصال مستقیم ( autoconnect = false ): سعی کنید مستقیماً به دستگاه جانبی وصل شوید و اگر دستگاه در دسترس نباشد، با شکست مواجه شوید. در صورت قطع ارتباط، کلاینت گات به طور خودکار سعی در اتصال مجدد ندارد.
  • اتصال خودکار ( autoconnect = true ): سعی کنید هر زمان که دستگاه جانبی در دسترس بود به طور خودکار به آن متصل شوید. در صورت قطع اتصال توسط دستگاه جانبی یا به دلیل خارج شدن دستگاه جانبی از محدوده، مشتری GATT به طور خودکار سعی می کند تا زمانی که دستگاه جانبی در دسترس است، دوباره وصل شود.

در پس زمینه

زمانی که برنامه در پس‌زمینه است، هیچ محدودیتی برای اتصال به دستگاه وجود ندارد، اگرچه در صورت قطع شدن فرآیند، اتصال بسته می‌شود. علاوه بر این محدودیت‌هایی برای شروع فعالیت‌ها (در اندروید 10 و بالاتر) یا خدمات پیش‌زمینه (در اندروید 12 و بالاتر) از پس‌زمینه وجود دارد.

بنابراین، برای انجام یک اتصال در پس‌زمینه، برنامه‌ها می‌توانند از راه‌حل‌های زیر استفاده کنند:

به یک دستگاه متصل بمانید

در حالت ایده‌آل، برنامه‌ها باید اتصالات خود را با دستگاه‌های جانبی فقط تا زمانی که لازم است حفظ کنند و پس از اتمام کار، اتصال را قطع کنند. با این حال، دو مورد وجود دارد که در آن یک برنامه ممکن است نیاز داشته باشد یک اتصال را به طور نامحدود زنده نگه دارد:

در هر دو مورد، گزینه های زیر در دسترس هستند:

هنگام جابجایی بین برنامه ها

پیدا کردن یک دستگاه، اتصال به آن و انتقال داده ها زمان بر و منابع زیادی است. برای جلوگیری از قطع شدن اتصال و مجبور به انجام کامل فرآیند هر بار که کاربر بین برنامه ها جابجا می شود یا کارهای همزمان انجام می دهد، باید اتصال را تا پایان عملیات زنده نگه دارید. می‌توانید از یک سرویس پیش‌زمینه با نوع connectedDevice یا API حضور دستگاه همراه استفاده کنید.

هنگام گوش دادن به اعلان های جانبی

برای گوش دادن به اعلان‌های جانبی، برنامه باید setCharacteristicNotification() را فراخوانی کند، با استفاده از onCharacteristicChanged() به تماس‌های برگشتی گوش دهد و اتصال را زنده نگه دارد. برای اکثر برنامه‌ها، بهتر است از این مورد استفاده با CompanionDeviceService پشتیبانی کنید، زیرا برنامه احتمالاً باید برای مدت طولانی به گوش دادن ادامه دهد. با این حال، می توانید از خدمات پیش زمینه نیز استفاده کنید.

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