백그라운드에서 소통하기

이 가이드에서는 앱이 백그라운드에서 실행 중일 때 주변기기와 통신하는 주요 사용 사례를 지원하는 방법을 간략하게 설명합니다.

이러한 각 사용 사례를 지원하는 여러 옵션이 있습니다. 각 방식에는 장점과 단점이 있어 특정 니즈에 맞게 어느 정도 적합하게 만들 수 있습니다.

다음 다이어그램은 이 페이지의 안내를 간략하게 보여줍니다.

기기 찾기

먼저 앱에서 연결할 기기를 찾아야 합니다. BLE 기기를 찾으려면 다음 API 중 하나를 사용하면 됩니다.

백그라운드

앱이 표시되지 않을 때 이러한 API 중 하나를 사용하는 데 제한이 없지만 두 가지 모두 앱 프로세스가 활성 상태여야 합니다. 앱 프로세스가 실행되고 있지 않으면 다음 해결 방법을 사용할 수 있습니다.

기기에 연결

기기를 찾은 후 연결하려면 다음 소스 중 하나에서 기기의 BluetoothDevice 인스턴스를 가져와야 합니다.

BluetoothDevice 인스턴스가 생성되면 connectGatt() 메서드 중 하나를 호출하여 해당 기기에 대한 연결 요청을 시작할 수 있습니다. autoConnect 부울로 전달하는 값은 다음 두 가지 연결 모드 중 GATT 클라이언트가 사용하는 모드를 정의합니다.

  • 직접 연결 (autoconnect = false): 주변기기에 직접 연결을 시도하고 기기를 사용할 수 없는 경우 실패합니다. 연결이 끊어지면 GATT 클라이언트는 자동으로 다시 연결을 시도하지 않습니다.
  • 자동 연결 (autoconnect = true): 주변기기를 사용할 수 있을 때마다 자동으로 연결을 시도합니다. 주변기기에서 연결을 시작했거나 주변기기가 범위를 벗어나는 경우 GATT 클라이언트는 주변기기를 사용할 수 있을 때 자동으로 다시 연결을 시도합니다.

백그라운드

프로세스가 종료되면 연결이 종료되지만 앱이 백그라운드에 있는 동안 기기 연결에 제한이 없습니다. 또한 백그라운드에서의 활동 시작에 제한사항 (Android 10 이상) 또는 포그라운드 서비스(Android 12 이상)가 있습니다.

따라서 앱은 다음 솔루션을 사용하여 백그라운드에서 연결을 실행할 수 있습니다.

기기 연결 상태 유지

앱은 필요한 경우에만 주변기기 연결을 유지하고 작업이 완료되면 연결을 해제하는 것이 이상적입니다. 그러나 앱이 연결을 무기한 유지해야 하는 두 가지 경우가 있습니다.

두 경우 모두 다음 옵션을 사용할 수 있습니다.

앱 전환 중

기기를 찾고 기기에 연결하고 데이터를 전송하는 데는 많은 시간과 리소스가 필요합니다. 사용자가 앱 간에 전환하거나 동시 작업을 실행할 때마다 연결이 끊기고 전체 프로세스를 실행해야 하는 상황을 피하려면 작업이 완료될 때까지 연결을 유지해야 합니다. connectedDevice 유형의 포그라운드 서비스 또는 호환 기기 정보 API를 사용할 수 있습니다.

주변기기 알림을 듣는 동안

주변기기 알림을 수신 대기하려면 앱이 setCharacteristicNotification()를 호출하고 onCharacteristicChanged()를 사용하여 콜백을 수신 대기하며 연결을 활성 상태로 유지해야 합니다. 대부분의 앱은 CompanionDeviceService로 이 사용 사례를 지원하는 것이 가장 좋습니다. 앱이 오랜 시간 동안 수신 대기해야 할 수 있기 때문입니다. 그러나 포그라운드 서비스를 사용할 수도 있습니다.

두 경우 모두 기기에 연결 섹션의 안내에 따라 종료된 프로세스 후에 다시 연결할 수 있습니다.