在 GATT Android 中获取 BLE 特性的值
Posted
技术标签:
【中文标题】在 GATT Android 中获取 BLE 特性的值【英文标题】:Get value of BLE characteristic in GATT Android 【发布时间】:2014-07-12 06:50:44 【问题描述】:我正在尝试使用以下代码读取特征并获取其值
private byte[] val;
mBluetoothLeService.readCharacteristic(characteristic);// reads it
val=characteristic.getValue();
String s=new String(val);
我的应用程序崩溃并显示错误“应用程序可能在其主线程上做的工作过多。”
我也试过
private String s;
mBluetoothLeService.readCharacteristic(characteristic);// reads it
s=characteristic.getStringValue(0);
但错误是一样的
我已经调试了我的代码以检查它是否获得了值
private String s;
mBluetoothLeService.readCharacteristic(characteristic);// reads it
s=characteristic.getStringValue(0);
system.out.println(s);
显示正确的值,但将代码作为 android 应用运行。我得到同样的错误。
【问题讨论】:
如果我没记错的话,这可能是因为你在主线程上做了太多的工作,你应该在单独的线程中进行繁重的处理,或者使用 Runnable 或 AsyncTask。这个 SO 问题可能会对您有所帮助 link 同上@Kyriakos。您应该在另一个线程上运行该代码。如果之后您需要更新 UI,您可以使用this.runOnUiThread() ...
相应地更新您的 UI(假设这指的是您的 Activity,或者您可以使用片段中的 getActivity()
代替它)。您也可以使用new Handler(Looper.getMainLooper()).post(task);
,其中任务是对您的 UI 的更新。
【参考方案1】:
如果我没记错的话,这可能是因为您在主线程上做了太多工作,您应该在单独的线程中进行繁重的处理,或者使用 Runnable 或 AsyncTask。 This SO question might help you.
【讨论】:
【参考方案2】:当你调用 Read 可以从 BluetoothGattCallback 中获取特征
BluetoothGattCallback mCallback=new BluetoothGattCallback()
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status)
;
;
【讨论】:
以上是关于在 GATT Android 中获取 BLE 特性的值的主要内容,如果未能解决你的问题,请参考以下文章
samsung ble api 无法从多个 GATT 特征中获取通知