jde*_*ere 6 android bluetooth bluetooth-lowenergy
是否可以自动连接蓝牙低功耗(BLE)设备?
的Android文档指示[ BluetoothDevice.connectGatt()](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,布尔值,android.bluetooth.BluetoothGattCallback))具有自动连接参数:
boolean指示是否在可用时自动连接到BLE设备
但是,要打电话给你,你需要先做一个BluetoothDevice.AFAIK获得此功能的唯一方法是扫描可用的设备.每次设置扫描以连接到设备似乎都不是一种理想的方式.此外,我尝试使用nRF控制主面板连接到我的外围设备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);
}
}
};
Run Code Online (Sandbox Code Playgroud)
所以这种类型的粘合似乎不起作用.
我的问题是:我是否在配对或autoConnect上做错了什么?或者我现在如何以唯一正确的方式工作?每次必须扫描设备似乎是一个真正的痛苦(和电池消耗),看看设备是否在那里,如果这样读取数据并明天检查,否则在一小时左右检查.蓝牙的意义在于它应该在它附近时直接配对,不是吗?
没有重新扫描它确实有效.你根本不需要配对.只需BluetoothGatt.connect()再次调用您从第一次连接获得的gatt对象.只要再次提供设备,您就会收到onConnectionStateChange活动BluetoothGattCallback.如果使用autoconnect选项,则甚至不需要调用 BluetoothGatt.connect()方法.只需监控你的cllback,close()如果你没有看到任何连接太长时间,请不要忘记关闭BluetoothGatt .
是的,要获得第一个连接,您应该扫描设备BluetoothAdapter.startLeScan,而不是常见的蓝牙设备扫描.
| 归档时间: |
|
| 查看次数: |
13062 次 |
| 最近记录: |