我说英语有点抱歉。我需要您的帮助,因为我已经投入了很多时间,而且我无法完成最后一个细节:_(
我必须将带有蓝牙LE的手机连接到继电器,才能打开或关闭门。提供本机蓝牙和插座,但无法进行任何有效的操作。经过大量研究,我找到了RxAndroidBle库并得到了第一个结果。
问题是我不习惯使用反应式编程,而且我真的不知道自己在做什么。我通过了代码和后续步骤,以查看是否有某些事情逃脱了我。
脚步:
通过已知的MAC地址直接连接到设备
发送开头十六进制命令
成功的情况下,请使用DELAY执行关闭命令
private void SendCommandRele(String enable, String disable, int time) {
bleDevice = rxBleClient.getBleDevice("BB:A0:56:06:0A:0A");
byte[] data = hexStringToByteArray (enable);
UUID uuid = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");
connectionDisposable = bleDevice.establishConnection(false)
.observeOn(AndroidSchedulers.mainThread())
.flatMapSingle(rxBleConnection -> rxBleConnection.writeCharacteristic(uuid, data))
.doOnError(error -> errorConnection())
.doOnComplete(new Action() {
@Override
public void run() throws Exception {
CloseDevice(disable);
}
})
//.repeat(3)
.retryWhen(io.reactivex.Observable::cache)
.doAfterNext(next -> CloseDevice(disable))
//.take(1)
.subscribe(
well -> {
Handler handler = new Handler();
handler.postDelayed(
new Runnable() {
@Override
public void run() {
CloseDevice(disable);
}
},
time
);
},
failed -> Log.e("E","Error: ")
);
progressDialog.dismiss();
//connectionDisposable.dispose();
}
--
private void CloseDevice(String disable) {
bleDevice = rxBleClient.getBleDevice("BB:A0:56:06:0A:0A");
byte[] data = hexStringToByteArray (disable);
connectionDisposable = bleDevice.establishConnection(false)
.observeOn(AndroidSchedulers.mainThread())
.flatMapSingle(rxBleConnection ->
rxBleConnection.writeCharacteristic(UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb"), data)
)
.doOnError(error -> {errorConnection();})
//.repeat(3)
//.retry(3)
.take(1)
.subscribe(
);
progressDialog.dismiss();
}
实际结果:
总的来说,我得到的结果是非常积极的,因为有时它会起作用,但有时却不会。一只草连续工作10次,而另一只根本不起作用。当然,我需要一个稳定的连接。
预期成绩:
正确的工作
最佳答案
我发现此错误:
-任务COMMON_BROADCAST_MESSAGE_RECIVED失败或超时。客户端断开连接。
-bta_gattc_mark_bg_conn无法找到以下对象的bg连接掩码:XX:XX:XX:XX:XX