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

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

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

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


답변

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

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

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

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

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


답변

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

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

그렇지 않으면 일부 공통 서비스에 동일한 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 ();


답변

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

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


답변

UUID는 Universally Unique Identifier를 나타냅니다. UUID는 전 세계에 고유하게 배포 된 단순한 128 비트 숫자입니다.

블루투스는 무선으로 데이터를 전송하고 주변의 모든 장치에서 데이터를 수신 할 수 있습니다. 때로는 Bluetooth를 통해 중요한 파일을 보내야하고 주변의 모든 장치가 범위 내에서 액세스 할 수 있다고 가정 해 보겠습니다. 따라서 다른 장치와 페어링 할 때 파일을 공유하기 전에 UUID 번호를 공유하고 일치시킵니다. 파일을 보낼 때 장치는 적절한 장치 UUID로 해당 파일을 암호화하고 네트워크를 통해 공유합니다. 이제 범위 내의 모든 Bluetooth 장치가 암호화 파일에 액세스 할 수 있지만 올바른 UUID 번호가 필요합니다. 따라서 올바른 UUID 장치 만 파일을 암호화 할 수 있으며 다른 장치는 잘못된 UUID의 원인을 거부합니다.

간단히 말해 UUID를 두 Bluetooth 장치간에 파일을 공유하기위한 비밀 암호로 사용할 수 있습니다.