2012-01-04 300 views
1

我正在使用BluetoothChat示例(3.1)代码示例来测试两个Samsung Galaxy Tabs之间的通信。我知道这已被问了很多次,但我仍然困惑,当我这样做:尝试连接蓝牙设备时拒绝连接

BluetoothSocket mmSocket 
... 
mmSocket.connect(); 

这产生了一个拒绝连接。我已经多次尝试在程序的外部和内部配对并取消配对,但没有任何结果。有没有人有任何想法?

更新(从答案补充):

的代码在这两个客户端&服务器是一样的。这些实际上是两个三星Galaxy Tabs(3.1)。试图连接到远程设备时发生错误。

 public ConnectThread(BluetoothDevice device, boolean secure) { 
     mmDevice = device; 
     BluetoothSocket tmp = null; 
     mSocketType = secure ? "Secure" : "Insecure"; 

     // Get a BluetoothSocket for a connection with the 
     // given BluetoothDevice 
     try { 
      if (secure) { 
       //tmp = device.createRfcommSocketToServiceRecord(
         //MY_UUID_SECURE); 
//     tmp = device.createRfcommSocketToServiceRecord(
//       UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); 
       Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); 
       tmp = (BluetoothSocket) m.invoke(device, 1);      

      } else {      
        Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] {int.class}); 
        tmp = (BluetoothSocket)m.invoke(device, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));     

      } 
     } catch (Exception e) { 
      Log.e(TAG, "Socket Type: " + mSocketType + "create() failed", e); 
     } 
     mmSocket = tmp; 
    } 

    public void run() { 
     Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType); 
     setName("ConnectThread" + mSocketType); 

     // Always cancel discovery because it will slow down a connection 
     mAdapter.cancelDiscovery(); 

     // Make a connection to the BluetoothSocket 
     try { 
      // This is a blocking call and will only return on a 
      // successful connection or an exception 
      mmSocket.connect(); 
     } catch (IOException e) { 
      // Close the socket 
      try { 
       Log.e("Ali", "Error interacting with remote device. Here is the cause: "+ e.getMessage()); 
       mmSocket.close(); 
      } catch (IOException e2) { 
       Log.e(TAG, "unable to close() " + mSocketType + 
         " socket during connection failure", e2); 
      } 
      connectionFailed(); 
      return; 
     } 

     // Reset the ConnectThread because we're done 
     synchronized (BluetoothChatService.this) { 
      mConnectThread = null; 
     } 

     // Start the connected thread 
     connected(mmSocket, mmDevice, mSocketType); 
    } 

听音部分如下:最后在这里

private class AcceptThread extends Thread { 
    // The local server socket 
    private final BluetoothServerSocket mmServerSocket; 
    private String mSocketType; 

    public AcceptThread(boolean secure) { 
     BluetoothServerSocket tmp = null; 
     mSocketType = secure ? "Secure":"Insecure"; 

     // Create a new listening server socket 
     try { 
      if (secure) { 
        tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE,UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); 
      } else { 

       tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(
         NAME_INSECURE, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));      
      } 
     } catch (IOException e) { 
      Log.e(TAG, "Socket Type: " + mSocketType + "listen() failed", e); 
     } 
     mmServerSocket = tmp; 
    } 

    public void run() { 
     if (D) Log.d(TAG, "Socket Type: " + mSocketType + 
       "BEGIN mAcceptThread" + this); 
     setName("AcceptThread" + mSocketType); 

     BluetoothSocket socket = null; 

     // Listen to the server socket if we're not connected 
     while (mState != STATE_CONNECTED) { 
      try { 
       // This is a blocking call and will only return on a 
       // successful connection or an exception 
       socket = mmServerSocket.accept(); 
      } catch (IOException e) { 
       Log.e("Ali", "Error while connecting to device because: "+ e.getStackTrace()); 
       break; 
      } 

      // If a connection was accepted 
      if (socket != null) { 
       synchronized (BluetoothChatService.this) { 
        switch (mState) { 
        case STATE_LISTEN: 
        case STATE_CONNECTING: 
         // Situation normal. Start the connected thread. 
         connected(socket, socket.getRemoteDevice(), 
           mSocketType); 
         break; 
        case STATE_NONE: 
        case STATE_CONNECTED: 
         // Either not ready or already connected. Terminate new socket. 
         try { 
          socket.close(); 
         } catch (IOException e) { 
          Log.e(TAG, "Could not close unwanted socket", e); 
         } 
         break; 
        } 
       } 
      } 
     } 
     if (D) Log.i(TAG, "END mAcceptThread, socket Type: " + mSocketType); 

    } 

你有logcat的:

  • 十月一日至五日:34:07.749 :E/BluetoothChat(22495):+++ ON CREATE +++ 01-05 012 E + BluetoothChat(22599):++ ON START ++ 01-05
  • 10:37:41.109:E/BluetoothChat(22599):++ ON START ++ 01-05
  • 10:37:50.009:d/BluetoothChat(22599):onActivityResult -1 01-05
  • 10:37:50.009:d/BluetoothChatService(22599):连接到:
  • 60:D0:A9: 85:AE:6A 01-05 10:37:50.009:D/BluetoothChatService(22599):
  • setState()1 - > 2 01-05 10:37:50.009:E/BluetoothChat(22599):+ ON
  • RESUME + 01-05 10:37:50.029:I/Bluetooth ChatService(22599):BEGIN
  • mConnectThread SocketType:安全十月1日至5日:37:50.029:
  • I/BluetoothChat(22599):MESSAGE_STATE_CHANGE:2月1日至五日10:37:55.169:
  • E /阿里(22599):错误与远程设备交互。原因如下:Host is down 01-05 10:37:55.169:
  • D/BluetoothChatService(22599):start 01-05 10:37:55.169:
  • D/BluetoothChatService(22599):setState() 2 - > 1月1日至5日10:37:55.189:
  • I/BluetoothChat(22599):MESSAGE_STATE_CHANGE:1月1日至5日10:37:55.219:
  • d/dalvikvm(22599):GC_CONCURRENT释放171K,4- %免费6522K/6791K,暂停2ms + 3ms 01-05 10:38:02.749:
  • W/PhoneWindow(22599):无法获取音频管理器01-05 10:38:04.969:
  • E/BluetoothChat (22599): - 暂停 - 01-05 10:38:04.989:
  • I/ApplicationPackageManager(22599):cscCountry不是德文:TPH 01-05 10:38:07.059:
  • D/DeviceListActivity(22599):doDiscovery()01-05 10:38:10。(22599):连接到:F0:08:F1:5E:51:67 01 - - 10: 05 10:38:10.609:
  • D/BluetoothChatService(22599):setState()1 - > 2 01-05 10:38:10.609:
  • E/BluetoothChat(22599):+ ON RESUME + 01-05 10:38:10.609:
  • I/BluetoothChatService(22599):BEGIN mConnectThread SocketType:安全十月1日至5日:38:10.629:
  • I/BluetoothChat(22599):MESSAGE_STATE_CHANGE:2月1日至五日10时38: 12.089:
  • E/BluetoothChat(22599): - 暂停 - 01-05 10:38:12.329:
  • D /剪贴板(22599):在开始输入时隐藏剪贴板对话框:由别人完成...! 10月1日至5日:38:12.339:
  • W/IInputConnectionWrapper(22599):showStatusIcon上无活性InputConnection 10月1日至5日:38:19.589:
  • E/BluetoothChat(22599):+ ON RESUME + 10月1日至5日:38:20.799:
  • E/Ali(22599):错误与远程设备交互。这里是原因:连接被拒绝10月1日至五日:38:20.799:
  • d/BluetoothChatService(22599):开始10月1日至五日:38:20.799:
  • d/BluetoothChatService(22599):的setState( )2 - > 1月1日至5日10:38:20.799:
  • I/BluetoothChat(22599):MESSAGE_STATE_CHANGE:1月1日至5日10:39:23.489:
  • E/BluetoothChat(22599): - ON PAUSE -
+0

请发布相关代码 - 服务器端和客户端。还记录了错误.. – 2012-01-04 16:59:55

回答

0

有被拒绝不同的原因: -the错误RFCOMM端口 - 黑色名单 - 其他设备的mac地址错误

+0

那么,解决方案是什么。我已经通过手动输入mac地址测试了mac地址,并且我知道mac地址不是问题。我该如何本地化这个问题? – 2012-01-04 07:28:42

+0

我甚至用反射方法进行了测试,但没有结果。 – 2012-01-04 10:32:15

+0

我可以将两台设备配对,但设备无法连接。请帮助 – 2012-01-04 11:27:00