这是一个糟糕的黑客?有一个更好的方法吗?

时间:2014-06-17 19:43:22

标签: android bluetooth bluetooth-lowenergy

我有一些有用的代码,但感觉就像一个坏主意。我想知道是否有更好的方法来做到这一点。

问题(老实说,你可以跳过这个并转到代码)

我有一个蓝牙LE应用程序偶尔需要尽可能快地将特性写入多个BLE设备(该应用程序是智能灯的控制器)。我目前为BLE通信设置的目的是使用一个处理所有通信的BluetoothContorller自定义单例,以及要求控制器写入指示灯并移交LampBluetoothGatt的{​​{1}}个对象。 {1}}到控制器。

解决方案

BluetoothGattCharacteristic

在我的gatt回调中:

handler.post(new Runnable() {
                @Override
                public void run() {
                    if (control != null) {
                            synchronized (BluetoothController.this) {
                                Logger.d("BluetoothController", "Waiting......");

                                for(int i = 0; i < 100; i++){
                                    if(isWaiting)
                                        try {
                                            Thread.sleep(10);
                                        } catch (InterruptedException e) {
                                            e.printStackTrace();
                                        }
                                    else
                                        break;
                                }
                                isWaiting = true;

                                Logger.d("BluetoothController", "Done waiting.");
                            }

                        control.setValue(message);
                        mBluetoothGatt.writeCharacteristic(control);
                    }
                }
            });

现在,这段代码有效,但我作为程序员的经验告诉我,这段代码会给我带来很多痛苦,肯定会有更好的。

编辑:使用Handler.Callback和消息的新代码

我已经使用Thread.wait()和notify()更改了我的代码以在句柄消息回调中进行等待,但似乎消息正在队列中备份,而最后一个消息执行似乎仍然是随机的。

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
        super.onCharacteristicChanged(gatt, characteristic);

        if(isWaiting){
            isWaiting = false;
        }
    }

0 个答案:

没有答案