developer tip

Android : 블루투스 UUID는 어떻게 작동하나요?

copycodes 2020. 10. 22. 08:12
반응형

Android : 블루투스 UUID는 어떻게 작동하나요?


블루투스 UUID가 무엇을 의미하는지 이해할 수 없습니다. UUID는 프로토콜 (예 : RFCOMM )을 나타 니까? 그렇다면 createRfcommSocketToServiceRecord()이름에 rfcomm을 바로 지정할 때 메서드에 UUID가 필요한 이유는 무엇입니까? BluetoothChat 샘플 코드에 임의의 하드 코딩 된 UUID가있는 이유는 무엇입니까?

내 질문은 이 질문에 따라 4.0.4를 실행하는 장치가 리플렉션을 사용하여 외부, Android가 아닌 장치에 연결하려고 할 때 null 포인터 예외가 발생하기 때문에 발생합니다 . 그러나 그 질문에 대한 해결책은 저에게 효과가 없습니다. UUID muuid = device.getUuids()[0].getUuid();예외가 발생합니다.

편집 : 이 답변에 따라 직렬 포트 서비스에 대한 UUID를 하드 코딩하여 문제를 해결했습니다 (사용 UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");).

createInsecureRfcommSocketToServiceRecord(),리플렉션 방법을 사용하지 않고 보안되지 않은 rfcomm 소켓을 만들기 위해 UUID를 제공해야하는 이유에 대해 더 의아해합니다 .

누구든지 나를 바로 잡을 수 있습니까?


일반적으로 Bluetooth 장치가 지원하는 몇 가지 공통 서비스 (프로토콜)를 나타냅니다.

자신의 rfcomm 서버를 만들 때 (를 사용하여 listenUsingRfcommWithServiceRecord), 연결하는 클라이언트가이를 식별 할 수 있도록 자신의 UUID를 지정해야합니다. createRfcommSocketToServiceRecordUUID 매개 변수가 필요한 이유 중 하나입니다 .

그렇지 않으면 일부 공통 서비스에 동일한 UUID가 있으므로 필요한 것을 찾아서 사용하십시오.

여기를 참조 하십시오


UUID는 정보를 고유하게 식별하는 데 사용됩니다. Bluetooth 장치에서 제공하는 특정 서비스를 식별합니다. 표준은 기본 BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB.

의료용 센서와 같은 장치는 처음 8 자리 숫자를 사전 정의 된 코드로 대체하여 서비스를 제공 할 수 있습니다. 예를 들어 RFCOMM 연결을 제공하는 장치는 단축 코드 0x0003을 사용합니다 .

따라서 Android 휴대폰은 장치에 연결 한 다음 SDP (서비스 검색 프로토콜)를 사용하여 제공하는 서비스 (UUID)를 찾을 수 있습니다.

대부분의 경우 이러한 고정 UUID를 사용할 필요가 없습니다. 예를 들어 채팅 애플리케이션을 만드는 경우 한 Android 휴대 전화가 동일한 애플리케이션을 사용하므로 동일한 UUID를 사용하는 다른 Android 휴대 전화와 상호 작용합니다.

그래서, 당신은 예를 들어, 사용하여 응용 프로그램 (웹에서 많은 랜덤 UUID 생성기 중 하나에 대한 임의의 UUID 설정할 수 있습니다 예를 들어 ).


UUID는 인터넷의 포트 번호와 개념이 비슷합니다. 그러나 Bluetooth와 인터넷의 차이점은 Bluetooth에서 각 UUID에 포트 번호가 부여되는 런타임 동안 SDP (서비스 검색 프로토콜) 서버가 포트 번호를 동적으로 할당한다는 것입니다. 다른 장치는 예약 된 포트 번호로 등록 된 SDP 서버에게 해당 장치에서 사용 가능한 서비스에 대해 물어보고 다른 UUID에 등록되어 서로 구별 가능한 다른 서비스로 응답합니다.


UUID는 숫자 일뿐입니다. Android 앱의 서버 측에서 생성하는 것 외에는 의미가 없습니다. 그런 다음 클라이언트는 동일한 UUID를 사용하여 연결합니다.

예를 들어, 서버 측에서 먼저 uuid = UUID.randomUUID ()를 실행하여 fb36491d-7c21-40ef-9f67-a63237b5bbea와 같은 난수를 생성 할 수 있습니다. 그런 다음 저장하고 다음과 같이 리스너 프로그램에 하드 코드하십시오.

 UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea"); 

Android 서버 프로그램은 다음과 같이 해당 UUID로 들어오는 요청을 수신합니다.

    BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);

BluetoothSocket 소켓 = server.accept ();


Bluetooth에서 모든 개체는 UUID로 식별됩니다. 여기에는 서비스, 특성 및 기타 많은 것들이 포함됩니다. Bluetooth는 표준 개체에 대해 할당 된 번호의 데이터베이스를 유지하고 공급 업체 (예약 비용을 충분히 지불 한)에 하위 범위를 할당합니다. 여기에서이 목록을 볼 수 있습니다.

https://www.bluetooth.com/specifications/assigned-numbers/

표준 서비스 (예 : 직렬 포트, 키보드, 헤드셋 등)를 구현하는 경우 해당 서비스의 표준 UUID를 사용해야합니다. 이렇게하면 개발하지 않은 장치와 상호 운용 할 수 있습니다.

사용자 지정 서비스를 구현하는 경우 호환되지 않는 타사 장치가 서비스를 다른 것으로 생각하지 않도록하기 위해 고유 한 UUID를 생성해야합니다. 가장 쉬운 방법은 임의의 항목을 생성 한 다음 애플리케이션에서 결과를 하드 코딩하는 것입니다 (물론 서비스에 연결할 장치에서 동일한 UUID를 사용).


요약하자면 : UUid애플리케이션을 고유하게 식별하는 데 사용됩니다. 각 응용 프로그램에는 고유 한UUid

따라서 UUid각 장치에 대해 동일하게 사용하십시오.

참고 URL : https://stackoverflow.com/questions/13964342/android-how-do-bluetooth-uuids-work

반응형