블루투스 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 설정할 수 있습니다 예를 들어 ).
답변
답변
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 장치간에 파일을 공유하기위한 비밀 암호로 사용할 수 있습니다.
