【发布时间】:2015-06-25 17:30:01
【问题描述】:
是否可以自动连接到蓝牙低功耗 (BLE) 设备?
Android documentation 表示 [BluetoothDevice.connectGatt()](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback)) 有一个 autoConnect 参数:
boolean 是否自动连接BLE设备 只要它可用
但是,要调用它,您首先需要 BluetoothDevice。 AFAIK 获得此功能的唯一方法是扫描可用设备。每次都设置扫描以连接到设备似乎不是一种理想的方式。另外,我尝试使用nRF Control Master Panel 使用autoConnect = true 连接到我的外围设备,但这并没有连接到设备。但是,在没有 autoConnect 的情况下连接确实可以连接,并且我已经成功地以这种方式从外围设备读取数据和向外围设备写入数据。
蓝牙中配对两个设备的一般方式。但是,搜索我的 BLE 设备并使用 BluetoothDevice.createBond() 似乎不起作用。在我的ACTION_BOND_STATE_CHANGED-callback 中,EXTRA_BOND_STATE 和 EXTRA_PREVIOUS_BOND_STATE 只是从 BOND_BONDING 转到 BOND_NONE 并返回。我没有读出错误或任何东西 - 所以也许我在这里遗漏了一些东西。这是回调:
private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);
Log.e(TAG, "prevState " + prevState + ", state " + state);
}
}
};
所以这种类型的绑定似乎不起作用。
我的问题是:我在配对或自动连接方面做错了吗?或者我目前如何让它以唯一正确的方式工作?每次都必须扫描设备,查看设备是否存在,如果有,则读取数据并明天再检查,否则一小时左右再检查,这似乎是一种真正的痛苦(和电池消耗)。蓝牙的重点是只要靠近就直接配对,不是吗?
【问题讨论】:
标签: android bluetooth bluetooth-lowenergy