是否可以自动连接到低功耗蓝牙(BLE)设备?
的Android文档指示[ BluetoothDevice.connectGatt()
](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,布尔值,android.bluetooth.BluetoothGattCallback))具有自动连接参数:
布尔值,指示是否在可用时立即自动连接到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);
}
}
};
因此,这种绑定似乎无效。
我的问题是:我在配对或自动连接时做错了吗?还是我目前的工作方式是唯一正确的方法?每次都必须扫描设备,看设备是否在那里,似乎很痛苦(而且会耗掉电池),如果这样,则读取数据并明天再检查,否则一小时左右再检查一次。蓝牙的要点是,只要附近有蓝牙,就应该直接配对,不是吗?
它无需重新扫描即可工作。您根本不需要配对。只需BluetoothGatt.connect()
再次调用从第一个连接中获取的gatt对象即可。只要onConnectionStateChange
您的BluetoothGattCallback
设备再次可用,您就会收到事件。如果使用自动连接选项,则甚至不需要调用BluetoothGatt.connect()
方法。只需监视您的Cllback,close()
如果您看不到任何连接太长时间,就不要忘记关闭BluetoothGatt 。
是的,要获得第一个连接,您应该使用扫描ble设备BluetoothAdapter.startLeScan
,而不要扫描常见的蓝牙设备。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句