2012-08-23 4 views
7

기기를 테스트하기 위해 기본 블루투스 애플리케이션을 만들려고합니다.Android 블루투스 연결 - 서비스 검색 실패

developer.android에서 코드를 받았습니다. 여기

http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices 내 스레드 코드의 일부를 실행 : 내가 mmSocket.connect();을 시도간에

 public void run() { 

     mBluetoothAdapter.cancelDiscovery(); 
     Log.i(TAG, "Discovery Cancel!"); 

     try { 
      Log.i(TAG, "Connection Started"); 
      mmSocket.connect(); 
      Log.i(TAG, "Connection Ended"); 
     } catch (IOException e) { 
      try { 
       Log.e(TAG, "Connection Failed", e); 
       mmSocket.close(); 
      } catch (IOException e2) { 
       Log.e(TAG, "Connection Close Failed", e2); 
      } 
      return; 
     } 

작동하지 여기 링크입니다. 항상 IOException를 던져 내 로그 캣에서 해당 로그를 얻을 : 나는이 기사에보고하고, 기록 된 것들을 시도했습니다

java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)

, 그들 중 누구도 내 문제를 해결하지 않았다. 안드로이드 ICS 4.0.4에

Android Bluetooth java.io.IOException: Connection refused?

Btw은 내가 일하고 있어요

Bluetooth connection on Android ICS not possible

Service discovery failed exception using Bluetooth on Android

Android Bluetooth: Service Discovery Failed, connection to Desktop/Laptop

.

다른 기기에서이 앱을 사용했기 때문에 기기에 문제가 있다는 것을 알고 있습니다.

답변

5

나는 아직도 UUID 물건을 이해하지 못한다. 그러나 문제는 UUID였다. 커널 로그에서 얻은 UUID를 사용하고 있는데, 이는 00001105-0000-1000-8000-00805F9B34FB입니다.

0

서비스 검색에 유효한 UUID를 제공해야합니다.

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID); 

다양한 표준 (기본) 블루투스 서비스 (핸즈프리, 파일 전송 등)에 대한 몇 가지 일반적인 UUID가 있습니다.

See here

0

그냥 장치를 테스트하려고하는 경우 SDK의 일부로 제공되는 블루투스 채팅 예제 프로젝트를 사용해보십시오. 사용하려는 코드와 developer.android.com에서 제공되는 코드는 Bluetooth Chat 예제에 포함되어 있습니다.

+0

은 이미 그 코드 샘플을 신청하는 근무,하지만 결과는 항상 동일합니다 ... 그것을 시도. – juliadream

1

비슷한 학습 과정을 거쳤습니다. 나는 일련의 예에서 배운 것을 문서화하려고 노력했다.

이 사람은 도움이 될 수 있습니다

http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html

그것은 안드로이드 기기와 블루투스를 통해 PC와 간단한 연결을 설정하는 것입니다. 예제에는 Android 파일과 Java 용 SPP 서버 및 PC 용 Perl이 포함되어 있습니다.

희망이 도움이됩니다.

+0

나는이 일을하고 있지만 여전히 일하지 않고있다. 나는 끔찍한 일을하고 있다고 생각한다. 관심을 가져 주셔서 감사합니다. – juliadream

1

앱이 어댑터가 발견 바쁜 동안 연결을 시도하지 않습니다 있는지 확인하십시오 문제가 내가

clientSocket.connect() 

라고하기 전에 내가

btAdapter.cancelDiscovery() 

를 호출 할 필요가 있다고했다 나타납니다 이것은 나를 위해 같은 문제를 해결하는 데 도움이 Matts Reco

2

다음 코드 조각은 나를 위해 작동합니다.

BluetoothDevice mmDevice; 
boolean temp = mmDevice.fetchUuidsWithSdp(); 
UUID uuid = null; 
if(temp){ 
uuid = mmDevice.getUuids()[0].getUuid(); 
} 
tmp = device.createRfcommSocketToServiceRecord(uuid); 
+0

몇 시간 동안 고민하고 "mmDevice.getUuids() [0] .getUuid()"가 내 문제를 해결했습니다. 이제 당신의 'if (temp)'논리를 이해해야합니다. –

5

그 날

BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); 
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); 
socket = (BluetoothSocket) m.invoke(device, 1); 
bluetoothAdapter.cancelDiscovery(); 
socket.connect(); 
+1

나를 위해 일했습니다. – DragonT

관련 문제