2010-02-05 2 views
13

내 PC와 통신 할 수있는 응용 프로그램을 작성 중입니다. SDK 2.1의 Bluetooth 기능을 사용했습니다.블루투스 -> 서비스 검색에 실패했습니다.

장치를 찾고 MAC 주소를 가져오고 RFCOMM 소켓을 만들었지 만 연결을 시작할 때 다음 오류 메시지가 나타납니다.

서비스 검색에 실패했습니다.

  1. 내 응용 프로그램에서 내 PC에서 동일하지 않은 때문에 UUID의 그것입니까?
  2. 내 PC에서 올바른 UUID를 얻으려면 어떻게해야합니까?

그러한 응용 프로그램을 작성하면 내 Nexus One이 클라이언트입니까? 아니면 서버입니까?

+4

나는 같은 문제가있다. – Tomas

답변

7

그래, 나도 같은 문제가있어,하지만 난 네 질문에 대답 할 수있을 것 같아. 예를 들어 "sdptool add --channel = 3 SP"를 사용하여 PC가 SPP 포트를 연 경우 Android 폰은 소켓을 열고이 소켓과 서버 (PC 또는 다른 Bluetooth 장치, 예를 들어, GPS, 마우스 등).

이 정보는 Bluetooth 문서를 통해 확인할 수 있습니다. 클라이언트의 정의는이 기사에서 취한 것입니다.

서버 (PC 등)에서 SPP 포트를 여는 경우 표준 서비스를 제공하고 있으며이 서비스에 할당 된 특별한 UUID가 있습니다. 이것은 내가 잘못하지 않았다면 00001101-0000-1000-8000-00805F9B34FB 일 것입니다.

그래서 안드로이드 개발자로부터 자격을 얻어야한다고 생각합니다. 또는 IRC의 업무 시간 중에 목요일에이 질문을하십시오.

+2

그 특별한 UUID가 나의 Arduino BT를 위해 일했다! 감사! – phreakhead

+3

감사합니다. philDev, UUID "00001101-0000-1000-8000-00805F9B34FB"도 저에게 도움이되었습니다. 기본 터미널 에뮬레이션을 실행하는 PC에서 BluetoothChat 샘플 앱을 실행합니다. –

2

UUID 일 수도 있지만 Bluetooth MAC이 대문자인지 확인하는 것이 좋습니다.

리눅스 박스의 터미널에서 hcidump -X을 실행하고 Linux 시스템과 전화 사이에 양방향 트래픽이 있는지 확인하십시오.

1

첫 번째 연결 후 SPP를 다시 연결할 때도 동일한 문제가있었습니다.

rfcomm channel=-1BluetoothService.java으로 설정했기 때문입니다. fetchRemoteUuids() 끝에 updateDeviceServiceChannelCache()을 추가 한 다음 효과가있었습니다.

+0

이것을 자세히 설명해 주시겠습니까? 수정 된 Android 소스를 프로젝트에 포함 시켰습니까? 아니면 어떻게 한거야? – Blackhex

2

장치에서 UUID를 찾을 수있는 방법을 발견했습니다. 클라이언트 측에서 device.createRfcommSocketToServiceRecord(uuid); 전에 추가

Process process = Runtime.getRuntime().exec("su -c 'sdptool records " + device.getAddress() + "'"); 
process.waitFor(); 

프로세스가 동결됩니다 20-30초 동안, 안드로이드 서비스를 가져 오는 때문이다. 그러나 서버가 검색 모드에 있으면 (서버가 Android 전화 인 경우) 매번 연결이 성공합니다!

+0

루트가되어야합니다. – psv

4

힌트 : Bluetooth 직렬 보드에 연결하는 경우 잘 알려진 SPP UUID 00001101-0000-1000-8000-00805F9B34FB를 사용해보십시오. 그러나 Android 피어에 연결하는 경우 고유 한 UUID를 생성하십시오.

The Link

0

이 점은 HTC에 주로 발생합니다. 나는 똑같은 문제에 직면했다. 처음 성공적으로 연결했지만 나중에 실패하면 전화기를 다시 시작하면 실패한 서비스가 다시 시작됩니다.