2013-01-14 203 views
1

我試圖找出是否可以可靠地檢測與非(非音頻)設備的藍牙連接何時丟失。 Android SDK提供藍牙聊天示例,其使用該片段:檢測到藍牙設備已斷開連接

public void run() { 
    Log.i(TAG, "BEGIN mConnectedThread"); 
    byte[] buffer = new byte[1024]; 
    int bytes; 

    // Keep listening to the InputStream while connected 
    while (true) { 
     try { 
      // Read from the InputStream 
      bytes = mmInStream.read(buffer); 

      // Send the obtained bytes to the UI Activity 
      mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer) 
        .sendToTarget(); 
     } catch (IOException e) { 
      Log.e(TAG, "disconnected", e); 
      connectionLost(); 
      break; 
     } 
    } 
} 

可靠性如何此方法時我啓動線程和12小時後斷開該設備,而無需使用該應用(服務在後臺運行)。該服務總是可以被殺死的課程?

然後有廣播。我的應用程序是否總是收到這些廣播?什麼時候不會?我已經試過落實,通過在AndroidManifest使用此:

<receiver android:name="MyReceiver" > 
     <intent-filter> 
      <action android:name="android.bluetooth.device.action.ACL_CONNECTED" /> 
      <action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" /> 
      <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" /> 
     </intent-filter> 
    </receiver> 

我測試過在很短的時間內這兩種方法,兩者的工作。 如前所述,我不確定這些手機在空閒很長時間後是否可靠。

誰能說明這一點?

回答

1

藍牙內的每個活動都有一個與其關聯的超時。它因設備而異。

只要啓用它,藍牙服務將在後臺運行。 ACL [異步連接更少]數據包通常用於傳輸非語音相關數據。 ACL就是兩個藍牙設備之間的連接通道。這可能會根據不活動計時器或超時值斷開連接。

您可以閱讀連接超時集時HCI的createConnection API是called.This信息可以通過執行hcidump tool.http獲得://www.bluez.org/download/