Berkomunikasi di latar belakang

Panduan ini memberikan ringkasan tentang cara mendukung kasus penggunaan utama untuk berkomunikasi dengan perangkat periferal saat aplikasi Anda berjalan di latar belakang:

Ada beberapa opsi untuk mendukung setiap kasus penggunaan ini. Masing-masing memiliki manfaat dan kekurangan yang mungkin membuatnya lebih atau kurang sesuai dengan kebutuhan spesifik Anda.

Diagram berikut menunjukkan tampilan sederhana panduan di halaman ini:

Temukan perangkat

Pertama, aplikasi Anda harus menemukan perangkat yang akan dihubungkan. Untuk menemukan perangkat BLE, Anda dapat menggunakan salah satu API berikut:

Di latar belakang

Tidak ada batasan untuk menggunakan salah satu API ini saat aplikasi tidak terlihat, tetapi keduanya memerlukan proses aplikasi Anda untuk tetap aktif. Jika proses aplikasi tidak berjalan, Anda dapat menggunakan solusi berikut:

Hubungkan ke perangkat

Untuk terhubung ke perangkat setelah menemukannya, Anda perlu mendapatkan instance BluetoothDevice untuk perangkat dari salah satu sumber berikut:

Setelah memiliki instance BluetoothDevice, Anda dapat memulai permintaan koneksi ke perangkat yang sesuai dengan memanggil salah satu metode connectGatt(). Nilai yang Anda teruskan ke boolean autoConnect menentukan dari dua mode koneksi berikut yang digunakan klien GATT:

  • Koneksi langsung (autoconnect = false): Mencoba terhubung ke perangkat periferal secara langsung, dan gagal jika perangkat tidak tersedia. Jika koneksi terputus, klien GATT tidak akan otomatis mencoba terhubung kembali.
  • Terhubung otomatis (autoconnect = true): Mencoba terhubung secara otomatis ke perangkat periferal setiap kali tersedia. Jika terjadi pemutusan koneksi yang dimulai oleh periferal atau karena periferal berada di luar jangkauan, klien GATT akan otomatis mencoba terhubung kembali saat periferal tersedia.

Di latar belakang

Tidak ada batasan untuk terhubung ke perangkat saat aplikasi berada di latar belakang, meskipun koneksi ditutup jika proses Anda dihentikan. Selain itu, ada batasan untuk memulai aktivitas (di Android 10 dan yang lebih tinggi) atau layanan latar depan (di Android 12 dan yang lebih tinggi) dari latar belakang.

Jadi, untuk melakukan koneksi saat berada di latar belakang, aplikasi dapat menggunakan solusi berikut:

Tetap terhubung ke perangkat

Idealnya, aplikasi harus mempertahankan koneksi ke perangkat periferal hanya selama diperlukan, dan memutuskan koneksi setelah tugas selesai. Namun, ada dua kasus saat aplikasi mungkin perlu mempertahankan koneksi tanpa batas waktu:

Dalam kedua kasus tersebut, opsi berikut tersedia:

Saat beralih antar-aplikasi

Menemukan perangkat, menghubungkan ke perangkat, dan mentransfer data memerlukan waktu dan memerlukan banyak resource. Untuk menghindari kehilangan koneksi dan harus melakukan proses lengkap setiap kali pengguna beralih antar-aplikasi atau melakukan tugas serentak, Anda harus mempertahankan koneksi hingga operasi selesai. Anda dapat menggunakan layanan latar depan dengan jenis connectedDevice atau API kehadiran perangkat pendamping.

Saat mendengarkan notifikasi periferal

Untuk memproses notifikasi periferal, aplikasi harus memanggil setCharacteristicNotification(), memproses callback menggunakan onCharacteristicChanged(), dan mempertahankan koneksi. Untuk sebagian besar aplikasi, sebaiknya dukung kasus penggunaan ini dengan CompanionDeviceService karena aplikasi kemungkinan perlu terus memproses selama jangka waktu yang lama. Namun, Anda juga dapat menggunakan layanan latar depan.

Dalam kedua kasus tersebut, Anda dapat terhubung kembali setelah proses dihentikan dengan mengikuti petunjuk di bagian Menghubungkan ke perangkat.