我在 Android和BLE 中发展。在 BLE设备断开连接后,我希望应用自动重新连接到 BLE设备,但返回范围并进行广告宣传。
我使用以下代码连接到BLE设备:
public void connect(final String address) {
// TODO Auto-generated method stub
Log.w(TAG, "BluetoothLeService Connect function.");
if(mBluetoothAdapter == null || address == null){
Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
//return false;
}
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
mBluetoothGatt = device.connectGatt(this, true, mGattCallback);
}
我已将AutoConnect
设置为true
,但当BLE设备断开连接并返回范围时,它没有重新连接。
在Android中将autoConnect设置为true时,为什么应用不会重新连接到BLE设备?
我错过了什么吗?
提前致谢。
答案 0 :(得分:13)
自动连接参数确定当远程设备在范围内时是否主动连接到远程设备(或)而是被动扫描并完成连接。
但这并不意味着重新连接已经断开数天的外围设备将重新连接。
通常,与设备的第一次连接应该是直接的(autoConnect设置为false),并且应该在autoConnect参数设置为true的情况下调用与已知设备的后续连接。
另请注意,自动连接仅在设备仍在播放时才有效。如果没有,那么它将无法工作。
我希望您在设备断开连接时手动重新连接。如果你最后这样做,你需要一个标记来确定设备是否在未经用户同意的情况下实际断开连接。
如果为true,则取消绑定/取消注册您的服务/广播接收器,然后使用您之前必须保存的设备地址再次连接。
答案 1 :(得分:-1)
根据我对BLE设备的实验,它在Kitkat和Lollipop等不同版本中具有不同的行为。即使我观察到,使用ScanCallback在API级别24中引入的也不那么可靠。
要自动连接工作,BLE设备必须处于活动状态。
对我来说,我必须支持kitkat和棒棒糖,所以在连接gatt时我称之为:
if(Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
gatt = device.connectGatt(this, true, executor);
} else {
gatt = device.connectGatt(this, false, executor);
}
现在自动连接在Lollipop和Kitkat都有效。