如何在Android中为BLE快速稳定写入连续特性?

如何在Android中为BLE快速稳定写入连续特性?,第1张

概述我正在 Android开发BLE,我可以扫描,连接和写入特性到BLE设备. 当我点击按钮时,我调用以下功能将BluetoothGatt和特性传递给AsyncTask. write_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { 我正在 Android开发BLE,我可以扫描,连接和写入特性到BLE设备.

当我点击按钮时,我调用以下功能将BluetoothGatt和特性传递给AsyncTask.

write_btn.setonClickListener(new VIEw.OnClickListener() {     @OverrIDe     public voID onClick(VIEw v) {        new WriteCharacteristic(mBluetoothGatt,HueCharacteristic).execute();     }});

写特性代码如下:

private class WriteCharacteristic extends AsyncTask<String,VoID,String> {        public BluetoothGatt mGatt;        public BluetoothGattCharacteristic mCharacteristic;        public WriteCharacteristic(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic){            mGatt = gatt;            mCharacteristic = characteristic;        }        @OverrIDe        protected String doInBackground(String... urls) {            mGatt.writeCharacteristic(mCharacteristic);            return null;        }    }

但是我尝试点击按钮连续,似乎AndroID没有写入每个特征的BLE设备.

如果我连续点击5次按钮,会丢失1〜3次.它只向BLE设备写入两次特性.

题:

有没有更好的方式来编写AndroID的连续稳定的BLE设备?

解决方法 AndroID蓝牙堆栈中的读/写特性系统在排队多个 *** 作方面并不好.您需要等待 *** 作完成,然后再发送.此外,由于您的代码使用AsyncTask,您将在某些设备上并行执行任务,因此即使您重复按下按钮,请求也不会被序列化.

要从框架获得稳定的结果,您需要自己排队这些请求,并在发送下一个命令之前等待BluetoothGattCallback onCharacteristicWrite()触发.您的代码需要同步对GATT对象的所有访问,以便下一个writeCharacteristic()才会到来,直到前一个请求的完成回调触发.

总结

以上是内存溢出为你收集整理的如何在Android中为BLE快速稳定写入连续特性?全部内容,希望文章能够帮你解决如何在Android中为BLE快速稳定写入连续特性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131505.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存