블루투스 개요

Android 플랫폼에는 블루투스 네트워크 스택 지원 기능이 포함되어 있어 기기가 다른 블루투스 기기와 무선으로 데이터를 교환할 수 있습니다. 앱 프레임워크는 블루투스 API를 통해 블루투스 기능에 대한 액세스를 제공합니다. 이러한 API를 사용하면 앱이 다른 블루투스 기기에 연결하여 지점 간 및 다중 지점 무선 기능을 사용할 수 있습니다.

앱은 블루투스 API를 사용하여 다음을 실행할 수 있습니다.

  • 다른 블루투스 기기를 검색합니다.
  • 페어링된 블루투스 기기의 로컬 블루투스 어댑터를 쿼리합니다.
  • RFCOMM 채널을 설정합니다.
  • 서비스 검색을 통해 다른 기기에 연결합니다.
  • 다른 기기로 데이터를 전송하거나 다른 기기에서 데이터를 전송받습니다.
  • 여러 연결을 관리합니다.

이 문서에서는 클래식 블루투스에 중점을 둡니다. 기기 간 스트리밍 및 통신과 같이 배터리 소모가 많은 작업에는 기본 블루투스가 적합합니다. 저전력 요구사항이 있는 블루투스 기기의 경우 저전력 블루투스 연결을 사용하는 것이 좋습니다.

이 문서에서는 다양한 블루투스 프로필을 설명하고 블루투스 API를 사용하여 블루투스를 사용한 통신에 필요한 네 가지 주요 작업을 실행하는 방법을 설명합니다.

  • 블루투스를 설정하는 중입니다.
  • 페어링되었거나 로컬 영역에서 사용할 수 있는 기기를 찾습니다.
  • 기기 연결
  • 기기 간 데이터 전송

기본 사항

블루투스 지원 기기가 서로 데이터를 전송하려면 먼저 페어링 프로세스를 사용하여 통신 채널을 형성해야 합니다. 검색 가능한 기기인 한 기기는 수신 연결 요청에 사용할 수 있습니다. 다른 기기에서 서비스 검색 프로세스를 사용하여 검색 가능한 기기를 찾습니다. 검색 가능한 기기가 페어링 요청을 수락하면 두 기기는 보안 키를 교환하는 결합 프로세스를 완료합니다. 기기는 나중에 사용할 수 있도록 이러한 키를 캐시합니다.

페어링 및 결합 프로세스가 완료되면 두 기기가 정보를 교환합니다. 세션이 완료되면 페어링 요청을 시작한 기기가 검색 가능한 기기에 연결된 채널을 해제합니다. 하지만 두 기기는 결합된 상태로 유지되므로 서로 범위 내에 있고 어느 기기도 결합을 삭제하지 않은 경우 향후 세션 중에 자동으로 다시 연결할 수 있습니다.

Bluetooth API를 사용하려면 매니페스트 파일에서 여러 권한을 선언해야 합니다. 그런 다음 BluetoothAdapter에 액세스하여 기기에서 블루투스를 사용할 수 있는지 확인합니다. 블루투스를 사용할 수 있는 경우 다음 세 단계를 따르세요.

특정 기기는 제공하는 데이터를 선언하는 특정 블루투스 프로필을 사용합니다.

주요 클래스 및 인터페이스

모든 블루투스 API는 android.bluetooth 패키지에서 사용할 수 있습니다. 다음은 블루투스 연결을 만드는 데 필요한 클래스와 인터페이스입니다.

BluetoothAdapter
로컬 블루투스 어댑터(블루투스 무선)를 나타냅니다. BluetoothAdapter는 모든 블루투스 상호작용의 진입점입니다. 이를 사용하여 다른 블루투스 기기를 검색하고, 결합된(페어링된) 기기 목록을 쿼리하고, 알려진 MAC 주소를 사용하여 BluetoothDevice를 인스턴스화하고, 다른 기기의 통신을 수신 대기하는 BluetoothServerSocket를 만들 수 있습니다.
BluetoothDevice
원격 블루투스 기기를 나타냅니다. 이 클래스를 사용하여 BluetoothSocket를 통해 원격 기기와의 연결을 요청하거나 기기의 이름, 주소, 클래스, 결합 상태와 같은 정보를 쿼리합니다.
BluetoothSocket
블루투스 소켓의 인터페이스를 나타냅니다(TCP Socket와 유사). 이는 앱이 InputStream 및 OutputStream를 사용하여 다른 블루투스 기기와 데이터를 교환할 수 있게 해주는 연결 지점입니다.
BluetoothServerSocket
수신 요청을 수신 대기하는 열린 서버 소켓을 나타냅니다(TCP ServerSocket와 유사). 두 기기를 연결하려면 한 기기에서 이 클래스를 사용하여 서버 소켓을 열어야 합니다. 원격 블루투스 기기가 이 기기에 연결을 요청하면 기기는 연결을 수락한 후 연결된 BluetoothSocket를 반환합니다.
BluetoothClass
블루투스 기기의 일반적인 특성과 기능을 설명합니다. 기기의 클래스와 서비스를 정의하는 읽기 전용 속성 집합입니다. 이 정보는 기기 유형에 관한 유용한 힌트를 제공하지만 이 클래스의 속성이 기기에서 지원하는 모든 블루투스 프로필과 서비스를 설명하는 것은 아닙니다.
BluetoothProfile
블루투스 프로필을 나타내는 인터페이스입니다. 블루투스 프로필은 기기 간 블루투스 기반 통신을 위한 무선 인터페이스 사양입니다. 핸즈프리 프로필이 그 예시입니다. 프로필에 관한 자세한 내용은 블루투스 프로필을 참고하세요.
BluetoothHeadset
휴대전화와 함께 사용할 블루투스 헤드셋을 지원합니다. 여기에는 블루투스 헤드셋 프로필과 핸즈프리(v1.5) 프로필이 모두 포함됩니다.
BluetoothA2dp
고급 오디오 배포 프로필(A2DP)을 사용하여 블루투스 연결을 통해 한 기기에서 다른 기기로 고품질 오디오를 스트리밍하는 방법을 정의합니다.
BluetoothHealth
블루투스 서비스를 제어하는 건강 기기 프로필 프록시를 나타냅니다.
BluetoothHealthCallback
BluetoothHealth 콜백을 구현하는 데 사용하는 추상 클래스입니다. 이 클래스를 확장하고 콜백 메서드를 구현하여 앱의 등록 상태 및 블루투스 채널 상태 변경에 관한 업데이트를 수신해야 합니다.
BluetoothHealthAppConfiguration
블루투스 Health 서드 파티 앱이 원격 블루투스 건강 기기와 통신하기 위해 등록하는 앱 구성을 나타냅니다.
BluetoothProfile.ServiceListener
특정 프로필을 실행하는 내부 서비스에 연결되거나 연결이 끊어지면 BluetoothProfile 프로세스 간 통신(IPC) 클라이언트에 알리는 인터페이스입니다.