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- 블루투스 서비스를 제어하는 건강 기기 프로필 프록시를 나타냅니다.
BluetoothHealthCallbackBluetoothHealth콜백을 구현하는 데 사용하는 추상 클래스입니다. 이 클래스를 확장하고 콜백 메서드를 구현하여 앱의 등록 상태 및 블루투스 채널 상태 변경에 관한 업데이트를 수신해야 합니다.BluetoothHealthAppConfiguration- 블루투스 Health 서드 파티 앱이 원격 블루투스 건강 기기와 통신하기 위해 등록하는 앱 구성을 나타냅니다.
BluetoothProfile.ServiceListener- 특정 프로필을 실행하는 내부 서비스에 연결되거나 연결이 끊어지면
BluetoothProfile프로세스 간 통신(IPC) 클라이언트에 알리는 인터페이스입니다.