Android는 중심 역할을 하는 저전력 블루투스 (BLE)에 관한 플랫폼 지원을 기본으로 제공하며, 앱이 기기 검색, 서비스 쿼리, 정보 전송에 사용할 수 있는 API를 제공합니다.
일반적인 사용 사례의 예시는 다음과 같습니다.
- 근처 기기 사이에서 소량의 데이터를 전송합니다.
- 근접 센서와 상호작용하여 현재 위치에 따라 사용자에게 맞춤설정된 환경을 제공합니다.
기존 블루투스와 달리 BLE는 전력 소비를 크게 줄이도록 설계되었습니다. 이를 통해 앱은 근접 센서, 심박수 모니터, 피트니스 기기와 같이 전력 요구사항이 더 엄격한 저전력 블루투스 기기와 통신할 수 있습니다.
주의: 사용자가 저전력 블루투스를 사용하여 기기를 다른 기기와 페어링하면 두 기기 간에 교환된 데이터에 사용자 기기의 모든 앱이 액세스할 수 있습니다.
그러므로 민감한 데이터를 수집하는 앱일 경우, 앱 레이어 보안을 구현하여 해당 데이터의 개인 정보를 보호해야 합니다.
기본 사항
BLE 지원 기기가 서로 데이터를 전송하려면 먼저 통신 채널을 형성해야 합니다. 블루투스 LE API를 사용하려면 매니페스트 파일에서 여러 권한을 선언해야 합니다. 앱에 블루투스를 사용할 권한이 있으면 앱은 BluetoothAdapter
에 액세스하여 기기에서 블루투스를 사용할 수 있는지 확인해야 합니다. 블루투스를 사용할 수 있으면 기기는 근처 BLE 기기를 스캔합니다.
기기가 발견되면 BLE 기기의 GATT 서버에 연결하여 BLE 기기의 기능을 확인합니다.
연결이 설정되면 사용 가능한 서비스와 특성을 기반으로 연결된 기기로 데이터를 전송할 수 있습니다.
주요 용어 및 개념
다음은 BLE의 주요 용어 및 개념을 요약한 것입니다.
- 일반 속성 프로필 (GATT)
- GATT 프로필은 BLE 링크를 통해 '속성'이라고 하는 짧은 데이터 조각을 송수신하기 위한 일반적인 사양입니다. 현재의 모든 BLE 애플리케이션 프로필은 GATT를 기반으로 합니다. 자세한 내용은 GitHub의 Android BluetoothLeGatt 샘플을 검토하세요.
- 프로필
- 블루투스 SIG는 BLE 기기의 여러 프로필을 정의합니다. 프로필은 기기가 특정 애플리케이션에서 작동하는 방식을 지정한 사양입니다. 한 기기에서 두 개 이상의 프로필을 구현할 수 있습니다. 예를 들어 기기에 심박수 모니터와 배터리 수준 감지기가 포함될 수 있습니다.
- 속성 프로토콜 (ATT)
- GATT는 속성 프로토콜 (ATT)을 기반으로 구축됩니다. 이를 GATT/ATT라고도 합니다. ATT는 저전력 블루투스 기기에서 실행되도록 최적화됩니다. 이를 위해 최대한 적은 양의 데이터를 사용합니다. 각 속성은 UUID (Universally Unique Identifier)로 고유하게 식별되는데, UUID는 고유 식별 정보에 사용하는 문자열 ID의 표준화된 128비트 형식을 나타냅니다. ATT가 전송하는 속성은 특성 및 서비스로 구성됩니다.
- 특성
- 특성에는 하나의 값과 특성의 값을 설명하는 0~n개의 설명자가 포함됩니다. 특성은 일종의 유형으로, 클래스와 유사하다고 생각하면 됩니다.
- Descriptor
- 설명자는 특성 값을 설명하도록 정의된 속성입니다. 예를 들어 설명자는 인간이 읽을 수 있는 설명, 특성 값의 허용 가능한 범위 또는 특성 값에 적용되는 측정 단위를 지정할 수 있습니다.
- 서비스
- 서비스는 특성의 모음입니다. 예를 들어 '심박수 모니터'라는 서비스에는 '심박수 측정값'과 같은 특성이 포함될 수 있습니다. 기존의 GATT 기반 프로필과 서비스 목록은 bluetooth.org를 참고하세요.
역할과 책임
기기가 저전력 블루투스 기기와 상호작용할 때 역할과 책임은 다음 두 가지 방식으로 나뉩니다.
중앙 vs. 주변. 이는 BLE 연결 자체에 적용됩니다. 중앙 역할을 맡은 기기는 스캔하며 광고를 찾고, 주변 역할을 맡은 기기는 광고를 게재합니다. 주변기기 역할을 지원하는 기기 두 대는 서로 통신할 수 없으며 중앙 역할을 지원하는 기기 두 대도 서로 통신할 수 없습니다.
GATT 서버와 GATT 클라이언트 비교 두 기기 사이에 연결이 설정된 후 서로 통신하는 방법을 결정합니다. 클라이언트 역할의 기기는 데이터 요청을 전송하고 서버 역할의 기기는 이를 처리합니다.
중앙 주변기기와 서버 클라이언트 역할 구분의 차이를 이해하려면 Android 휴대전화와 센서 데이터를 휴대전화에 다시 보고하는 BLE 지원 활동 추적기가 있는 경우를 생각해 보세요.
휴대전화(중앙 기기)는 BLE 기기를 적극적으로 스캔합니다. 활동 추적기(기기 주변기기)는 연결 요청을 광고하고 수신 대기합니다.
휴대전화와 활동 추적기 사이에 연결이 설정되면 서로 GATT 메타데이터를 전송하기 시작합니다. 이 경우 휴대전화에서 실행 중인 앱이 데이터 요청을 전송하므로 GATT 클라이언트 역할을 합니다. 활동 추적기에서 이러한 요청을 처리하므로 GATT 서버 역할을 합니다.
앱의 대체 설계는 휴대전화가 대신 GATT 서버 역할을 하는 것을 포함할 수 있습니다. 자세한 내용은 BluetoothGattServer
를 참고하세요.