如何以编程方式检查Android中的蓝牙设备的连接状态?

我可以枚举配对的Bluetooth设备,我需要检查应用程序启动时的当前连接状态。

但是,我发现没有办法获得连接状态?!

以下是我尝试过的一些努力,但是失败了:

  1. android.bluetooth.BluetoothDevice

它具有获取远程设备的绑定状态的方法,绑定状态的可能值为: BOND_NONEBOND_BONDINGBOND_BONDED 。 但这不是连接状态。

  1. android.bluetooth.BluetoothProfile

该方法可用于获取连接状态,但必须先获取BluetoothProfile对象。

 public abstract int getConnectionState (BluetoothDevice device); 

正如在doc中所描述的:“ 客户端应该调用getProfileProxy(Context,BluetoothProfile.ServiceListener,int)来获取Profile Proxy ”,它只能在状态改变时调用的ServiceListener检索。

如果我在启动状态下查询状态而又没有发生任何状态改变呢?

  1. android.bluetooth.BluetoothManager

它提供了一个方法:

 public int getConnectionState (BluetoothDevice device, int profile); 

但不能用于检测Bluetooth音箱的连接状态,因为configuration参数只接受GATTGATT_SERVER (对于低能耗设备),不支持其他configuration文件( HEADSETHEALTHA2DP )。

  1. android.bluetooth.BluetoothAdapter

它提供了一个方法:

 public int getProfileConnectionState (int profile); 

此function可用于检查本地Bluetooth适配器是否连接到任何远程设备的特定configuration文件。 它可以用来检查指定的configuration文件。 但它不能用来检查给定的设备。

有谁知道如何获得给定的Bluetooth设备的连接状态?

提前致谢。

  • 如何在Android Wear中加载URL图片?
  • 一次可以通过蓝牙与Android设备配对多less个最大设备?
  • 以编程方式配对蓝牙设备,而不需要用户inputPIN码
  • 如何将蓝牙活动转移到服务中
  • 是否可以直接将Android Wear设备与另一个BLE设备连接,而不需要电话设备的交互?
  • 如何在Android中启用A2DP接收器function?
  • 蓝牙连接失败“java.io.IOException:读取失败,套接字可能closures或超时,读取ret:-1”
  • Android可以通过蓝牙支持Zeroconf / Bonjour吗? TCP / IP如何?
  • 请参阅类似问题的答案中的注释如何以编程方式确定蓝牙设备是否已连接? (Android 2.2) :

    • 应用程序启动时无法检索连接的设备列表。 蓝牙API不允许你QUERY,而是允许你听CHANGES。
    • 一个愚蠢的解决上述问题将检索所有已知/配对设备的列表…然后尝试连接到每一个(以确定是否连接)。 或者,您可以使用后台服务观看Bluetooth API并将设备状态写入磁盘,供应用程序在以后使用。