2016-10-22 4 views
3

지금은 새로운 Android 애플리케이션을 개발하고 있습니다. 나는 그 애플 리케이션을 위해 블루투스가 필요합니다. serversocket/socket 시스템을 통해 두 개의 (쌍으로 연결된) 장치를 연결하려고 할 때마다 작동중인 소켓을 만들 수 없습니다. 항상 반환 :Android에서 블루투스 연결을 위해 어떤 UUID를 선택해야합니까?

java.io.IOException: read failed, socket might closed or timeout, read ret: -1 

내 질문은 : 잘못된 UUID를 사용하고 있습니까? 그게 아니라면. 무엇이 잘못 되었을지 다른 제안 사항이 있습니까?

public Accept(BluetoothAdapter bt, BluetoothDevice device, Context context) { 
      try { 
       BluetoothAdapter.getDefaultAdapter().cancelDiscovery(); 
       BluetoothServerSocket tmp = null; 
       try { 
        UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423"); 
    //Here is the point when it doesn't work... 
        tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); 
       } catch (Exception e) { 
       } 
       mmServerSocket = tmp; 

       bt_device = device; 
      } catch (Exception e) { 
      } 
     } 

미리 도움을 주셔서 감사합니다.

답변

0

나는 여기에 동의 진술을 놓치고 있다고 생각합니다. 다음 문장을 들으려면 tmp.accept()를 사용해야합니다. 이렇게하면 문제가 해결됩니다. 그래서, 당신의 코드는 다음과 같아야합니다

try { 
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423"); 
Bluetoothsocket clientSocket; 
//Here is the point when it doesn't work... 
tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); 
clientSocket = tmp.accept(); 
} 

또한, 한 가지 여기에 아래로주의하는, 함수 호출 코드를 차단하고 동의합니다.

희망이 도움이됩니다.

+0

우선 : 귀하의 회신에 감사드립니다. 그러나 이것이 내 문제를 해결하지 못했다고해서 유감입니다. 아마 충분한 코드를주지 않았을거야. 내 코드는 기본적으로 다음과 같이 보입니다. [link] (https://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingAsAServer) 그래서 저는 그것을 Thread로 처리합니다. 그리고 그 스레드의 run() 메소드에서 accept() - Methode를 호출합니다. – Swittmann

+0

하지만이 메소드를 호출하자마자 bt.listenUsingRfcommWithServiceRecord (context.getResources(). getString (R.string.bt_string_for_profile_image), uuid); thr serversocket의 채널은 -1입니다. 그래서이 메소드에 문제가 있다고 생각합니까? – Swittmann

+0

오오 .. 완전한 코드를 알지 못해 죄송합니다 ... 여기서 가장 먼저 할 수있는 일은 수신 기능에서 반환 된 오류 코드/예외를 확인하는 것입니다. 이렇게하면 오류의 원인을 이해하는 데 도움이됩니다. 내가 제공 한 링크를 읽으면서이 경우에는 "Bluetooth를 사용할 수 없거나 사용 권한이 충분하지 않거나 사용중인 채널과 같이 오류가 발생할 경우에만 예외를 수신 할 수 있습니다." – aksonlyaks