2014-09-11 106 views
8

我可以枚舉配對的Bluetooth設備,我需要檢查應用程序啓動時的當前連接狀態。如何以編程方式檢查Android中藍牙設備的連接狀態?

但是,我發現沒有辦法獲得連接狀態?!

這裏有一些努力,我嘗試過但失敗了:

  1. android.bluetooth.BluetoothDevice

它獲得遠程設備的結合狀態的方法,以及可能的值。鍵態爲:BOND_NONE,BOND_BONDINGBOND_BONDED。但這不是連接狀態。

  • android.bluetooth.BluetoothProfile
  • 的方法可以用於獲得連接狀態,但必須首先獲得BluetoothProfile對象。

    public abstract int getConnectionState (BluetoothDevice device); 
    

    如描述文檔:「客戶來電垂詢getProfileProxy(上下文,BluetoothProfile.ServiceListener,INT),獲取配置文件代理」,它只能在調用時的狀態變化ServiceListener進行檢索。

    如果我在啓動時查詢狀態而沒有發生任何狀態更改,該怎麼辦?

  • android.bluetooth.BluetoothManager
  • 它提供了一種方法,包括:

    public int getConnectionState (BluetoothDevice device, int profile); 
    

    但是它不能被用於檢測Bluetooth揚聲器的連接狀態,因爲配置參數只接受GATT或​​(對於低能量設備),不支持其他配置文件(HEADSET,HEALTHA2DP)。

  • android.bluetooth.BluetoothAdapter
  • 它提供了一種方法,包括:

    public int getProfileConnectionState (int profile); 
    

    此功能可用於檢查本地Bluetooth適配器是否被連接到任何特定配置文件的遠程設備。它可以用來檢查指定的配置文件。但它不能用於檢查給定的設備。

    有誰知道如何獲得給定Bluetooth設備的連接狀態?

    在此先感謝。

    +0

    您是否找到任何答案? – 2015-09-02 09:54:34

    +0

    在這兩天的幫助可以不勝感激。找到任何解決方案。我想檢查藍牙gatt連接狀態,如果連接,則需要等待,直到它移動到斷開狀態,但我使用getConnectionState()它會引發異常。 – prasanthMurugan 2017-10-23 13:41:44

    回答

    1

    看到答案的音符從類似的問題How to programmatically tell if a Bluetooth device is connected? (Android 2.2)

    • 沒有辦法來檢索應用程序啓動時連接設備的列表。 Bluetooth API不允許您進行QUERY,而是允許您聆聽CHANGES。
    • 解決上述問題的一個竅門是檢索所有已知/配對設備的列表...然後嘗試連接到每個設備(以確定您是否已連接)。 或者,您可以讓後臺服務人員觀看藍牙API並將設備狀態寫入磁盤,供應用程序在以後使用。