从BLE状态中删除蓝牙

时间:2018-01-26 13:06:12

标签: android bluetooth bluetooth-lowenergy

我正在尝试在我的Android应用中以编程方式启用蓝牙。

adapter = BluetoothAdapter.getDefaultAdapter();
if (!adapter.isEnabled()) {
  adapter.enable();
}

但是,有时候(并不总是)我会在控制台中收到以下消息:" BT处于BLE_ON状态"。考虑到我的连接不应该是BLE,我怎么能摆脱它呢?

有用信息:https://android.googlesource.com/platform/frameworks/base/+/a0b91d7%5E!/

1 个答案:

答案 0 :(得分:1)

查看源代码,它似乎无法通过API进行调整。有时似乎服务(蓝牙服务)将进入仅BT LE状态。更有趣的是,如果你在API级别23上查看BluetoothAdapter.getState()的源代码,框架会处理这个"内部状态"作为一个非公共国家。所以也许这是一个过渡状态,首先发生,也许过了一会儿,非LE功能被启用(没有关于这个的文档,只是在黑暗中拍摄)。

此外,如果您查看API 25及更高版本的源代码,方法enable不再检查状态,只是异步传递到基础蓝牙服务。在源代码中找到了两个关于启用/禁用BLE的方法,分别是enableBLE和disableBLE()。

这种方法是公开的,但对外界是隐藏的。编写一些将这些方法称为几行的反射代码并不难,但我绝对建议大量研究使用另一种方法并将其作为最后的手段。我这样说是因为enable()会尝试打开设备上的蓝牙服务,而用户却没有明确知道发生了什么。这是一种潜在危险的方法,包含在公共蓝牙框架中,用于设置应用程序和窗口小部件。我推荐使用" android方式"通过从系统请求蓝牙来启用蓝牙。这也可能有助于解决您的问题。