2011-02-03 3 views
6

나는 완전히 내 통제 범위를 벗어난 하드웨어 장치와 통신하기 위해 안드로이드 애플리케이션을 작성하고있다.고정 채널의 안드로이드 RFCOMM 소켓

내 응용 프로그램은 listenUsingRfcommWithServiceRecord 및 UUID 00001101-0000-1000-8000-00805F9B34FB를 사용하여 수신 소켓을 만듭니다. 그런 다음이 소켓에서 accept()를 호출하여 원격 장치가 연결될 때까지 기다리지 만 결코 연결하지 않습니다.

나는 하드웨어 장치 제조사와 이야기를 나눴는데, 그들은 그 장치가 원격 장치의 "채널 1에 간단히 연결"한다고 말합니다. 즉, 올바른 채널 번호를 찾기 위해 SDP 탐색을 수행하지 않습니다. 그들은 이것을 변경하는 것을 거부합니다. (물론 잘못된 것입니다.)

제 질문은 고정 RFCOMM 채널 번호를 사용하도록 안드로이드를 강요하는 방법이 있습니까? 클라이언트에 연결할 때 createRfcommSocket을 직접 호출하는 것과 같은 리플렉션을 사용했을 수 있습니다.

답변

1

해당 API가 있지만 지원되지 않습니다. 여전히 관심이 있다면 Android 1.5 backport of android.bluetooth 소스의 소스 코드를 확인하십시오.

그러나 지원되지 않는 API는 이후 릴리스에서 제거 될 수 있음을 유의하십시오.

+0

답장을 보내 주셔서 감사합니다. – didster

1

매우 해킹 방법은 모든 채널을 소비 한 다음 원하는 채널을 출시하는 것입니다. 나는 당신과 같은 문제가 있는데이 해킹은 불만없이 1 년 동안 현장에서 일하고 있습니다. 이에 대한 허점이 있기 때문에 성공 여부는 유스 케이스에 달려 있습니다.

최대 30 개의 채널이 있으므로 정의한 UUID로 30 개 이하의 연결을 열 수 있습니다. 이제 spdtool을 사용하여 원하는 채널에 대한 소켓 연결의 UUID를 찾습니다. 해당 연결을 닫습니다.

이제 채널 1이 사용 가능한 유일한 채널이됩니다. 원하는 방식으로 연결하십시오. 연결이 설정되면 다른 모든 연결을 닫으십시오.

나는 그것이 지옥과 같은 해킹 인 것을 안다. 그러나 그것은 나의 유스 케이스를 위해 일했다!

관련 문제