0

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

当我写信时,我想收到响应(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;
    }
4

1 回答 1

0

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

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

我所阅读和观察到的是,Android OS 在建立连接几秒钟后协商一个更宽松的连接间隔以节省能量。这可能是您观察到放缓的原因。

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

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

于 2017-10-24T09:49:09.730 回答