2012-03-29 14 views
8

Ich habe das gleiche Problem wie in einer früheren (und unbeantworteten) Frage, ich zögerte zu bearbeiten, wie ich mehr hinzufügen möchte Information. Also hier ist die verwandte Frage: Android bluetooth connection fails (Error: no bt sock found, scn 1).Android Bluetooth Verbindung Fehler (keine BT Socke gefunden, Scn 1) - Endlosschleife

Der Fehler tritt beim Versuch auf, eine Bluetooth-Verbindung herzustellen. Ich komme nicht immer vor (warum?), Aber es ist ziemlich häufig. Ich schreibe diese App für Android 2.3 mit Eclipse Indigo.

Hier das Protokoll, das ich erhalte, während, bevor er den Fehler, die Verbindung zu tun (wie es scheint, die Verbindung erfolgreich ist, bevor der Fehler auftritt):

03-29 15:14:52.205: D/BLZ20_ASOCKWRP(22027): asocket_connect 
03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): blz20_wrp_connect: s 53 
03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): blz20_wrp_connect: fd (-1:53), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 
03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): __connect_prot_rfcomm: connecting to... 0440201b0800, rc chan 1 
03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): __connect_prot_rfcomm: non blocking mode 
03-29 15:14:52.205: I/BTL_IFC(22027): send_ctrl_msg: [BTL_IFC CTRL] send BTLIF_BTS_RFC_CON_REQ (BTS) 23 pbytes (hdl 52) 
03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): blz20_wrp_connect: success 
03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): blz20_wrp_poll: nfds 2, timeout -1 ms 
03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): blz20_wrp_poll: pending connect fd (-1:53), bta -1, rc 1, wflags 0x0, cflags 0x1, port 0 
03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): btlif_wait_response: id(s) |BTLIF_BTS_RFC_CON_RSP|BTLIF_BTS_RFC_DISC_IND| 
03-29 15:14:52.920: I/BTL_IFC(22027): btl_ifc_ctrl_rx: [BTL_IFC CTRL] recv BTLIF_BTS_RFC_CON_RSP (BTS) 22 pbytes (hdl 52) 
03-29 15:14:52.920: I/BLZ20_WRAPPER(22027): btlif_ctrl_callback: btlif_ctrl_callback : msg id BTLIF_BTS_RFC_CON_RSP 
03-29 15:14:52.920: E/BLZ20_WRAPPER(22027): ##### ERROR : btlif_process_con_rsp: no bt sock found, scn 1##### 

Und hier ist die Log-I erhalten, während die Verbindung schlägt fehl (aber kein Fehler)

03-29 15:20:37.100: D/BLZ20_ASOCKWRP(22027): asocket_abort [44,45,46] 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: s 44, how 2 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: fd (-1:44), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: shutdown socket 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_write: wrote 1 bytes out of 1 on fd 46 
03-29 15:20:37.100: D/BLZ20_ASOCKWRP(22027): asocket_destroy 
03-29 15:20:37.100: D/BLZ20_ASOCKWRP(22027): asocket_abort [44,45,46] 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: s 44, how 2 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: fd (-1:44), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: shutdown socket 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_write: wrote 1 bytes out of 1 on fd 46 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_close: s 46 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_close: std close (46) 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_close: s 45 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_close: std close (45) 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_close: s 44 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_close: fd (-1:44), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 
03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): __close_prot_rfcomm: fd 44 
03-29 15:20:37.100: I/BTL_IFC(22027): send_ctrl_msg: [BTL_IFC CTRL] send BTLIF_BTS_RFC_CLOSE (BTS) 8 pbytes (hdl 52) 
03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wrp_close_s_only: wrp_close_s_only [44] (44:-1) [] 
03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wrp_close_s_only: data socket closed 
03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wsactive_del: delete wsock 44 from active list [ad439320] 
03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wrp_close_s_only: wsock fully closed, return to pool 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): btsk_dump_list: fd (-1:53), bta -1, rc 1, wflags 0x900, cflags 0x0, port 0 
03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): btsk_free: success 

beim Debuggen ich habe herausgefunden, dass die ConnectThread zur Herstellung der Verbindung verwendet hält im Fall des Fehlers ausgeführt wird, das heißt, es eingetreten ist, in eine Endlosschleife. Wenn also ein anderer Thread versucht, diese ConnectThread abzubrechen und zu beenden, stürzt die Anwendung ab.

Sehen Sie hier den Quellcode dieser ConnectThread, die eine innere Klasse eines Service (sehr ähnlich Probe BluetoothChat):

/** 
* This thread runs while attempting to make an outgoing connection 
* with a device. It runs straight through; the connection either 
* succeeds or fails. 
*/ 
private class ConnectThread extends Thread 
{ 
    private final BluetoothSocket mmSocket; 
    private final BluetoothDevice mmDevice; 

    public ConnectThread(BluetoothDevice device) 
    { 
     mmDevice = device; 
     // Use a temporary object that is later assigned to mmSocket, 
     // because mmSocket is final 
     BluetoothSocket tmp = null; 

     // Get a BluetoothSocket to connect with the given BluetoothDevice 
     try 
     { 
      // SerialPortServiceClass_UUID is the app's UUID string, also 
      // used by the server code 
      tmp = device.createRfcommSocketToServiceRecord(SerialPortServiceClass_UUID); 
     } catch (IOException e) 
     { 
      if (D) Log.e(TAG, "create RFCOMM failed", e); 
      // here I do something to notify the UI that the connection has failed 

      // Reset the ConnectThread because the connection has failed 
      synchronized (DataReceiverService.this) 
      { 
       mConnectThread = null; 
      } 
     } 
     mmSocket = tmp; 
    } 

    public void run() 
    { 
     if (D) Log.i(TAG, "BEGIN mConnectThread"); 
     setName("ConnectThread"); 

     // Cancel discovery because it will slow down the connection 
     mBtAdapter.cancelDiscovery(); 

     try 
     { 
      // Connect the device through the socket. This will block 
      // until it succeeds or throws an exception 
      mmSocket.connect(); 
     } catch (IOException connectException) 
     { 
      // Unable to connect, close the socket and get out 
      try { 
       mmSocket.close(); 
      } catch (IOException closeException) 
      { 
       if (D) Log.e(TAG, "unable to close() socket during connection failure", closeException); 
      } 
      // here I do something to notify the UI that the connection has fqiled 
      return; 
     } 

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

     // Do work to manage the connection (in the ConnectedThread) 
     connected(mmSocket, mmDevice); 
    } 

    /** Will cancel an in-progress connection, and close the socket */ 
    public void cancel() 
    { 
     try { 
      mmSocket.close(); 
     } catch (IOException e) 
     { 
      if (D) Log.e(TAG, "close() of connect socket failed", e); 
     } 
    } 
} 
+0

passiert völlig zufällig für mich auf einem Samsung GT-I9100 (Android 2.3) - aber sobald es beginnt zu versagen, muss ich mein Telefon neu starten, damit es wieder funktioniert. Ich frage mich, was zum Teufel das "BLZ20_WRAPPER" ist? Ist das eine Samsung-spezifische Bluetooth-Implementierung? – AgentKnopf

Antwort

Verwandte Themen