多次写入时速度较低

时间:2017-10-24 07:14:33

标签: android bluetooth-lowenergy rxandroidble

我想使用计时器进行多次写入。 我正在尝试执行以下操作:

当我写作时,我想收到响应(OnWriteSuccess),当我得到它时,我会再写一次。

前十 - 二十次写入是可以的,但在那之后,我每次写入的时间间隔为2到4秒。

boolean envia = true;
 public void write() {


    Timer myTimer = null;
    if (myTimer == null) {
        Handler handler = null;
        if (handler == null) {
            handler = new Handler();
        }

        myTimer = new Timer();
        Handler finalHandler = handler;
        myTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                finalHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (envia) {
                            envia = false;


                            if (buc == 256) {
                                buc = 0;
                            }


                            byte bytesToWrite[] = new byte[20];
                            for (int x = 0; x < 20; x++) {
                                bytesToWrite[x] = (byte) buc;
                                buc++;
                            }
                            if (isConnected()) {
                                connectionObservable
                                        .flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(UUID_1, bytesToWrite))
                                        .observeOn(AndroidSchedulers.mainThread())
                                        .subscribe(
                                                bytes -> onWriteSuccess(),
                                                CharacteristicOperationExampleActivity.this::onWriteFailure
                                        );
                            }
                        }
                    }
                });

            }
        }, 200, 300);

private void onWriteSuccess() {
    //noinspection ConstantConditions
    Snackbar.make(findViewById(R.id.main), "Write success", Snackbar.LENGTH_SHORT).show();
    envia = true;
    }

1 个答案:

答案 0 :(得分:0)

BLE的速度由连接间隔*确定。

Android操作系统通常使用一些非常激进的设置来建立连接,以便花费尽可能少的时间来连接(和发现服务)。

我已经阅读和观察到的是,Android OS在建立连接几秒后协商更轻松的连接间隔以保存能量。这可能是您观察经济放缓的原因。

您可以尝试更改行为的方法是调用RxBleConnection.requestConnectionPriority(),以触发Android协商不同的连接间隔。如果Android操作系统和外围设备会就新协商的参数达成一致,那么连接速度应该会改变。
不幸的是,BluetoothGattCallback上没有回调确认协议何时成功(或者即使)成功

*连接间隔-BLE连接针对低能耗进行了优化,实际传输在时间窗口中进行。这些窗口周期性地发生,周期等于连接间隔,因此连接间隔越短,在特定时间范围内可用的传输窗口越多 - 可以进行更多传输。