试图读取PlatformException的特性

时间:2018-07-12 16:09:03

标签: bluetooth bluetooth-lowenergy flutter

我正在尝试从带有插件https://github.com/pauldemarco/flutter_blue的设备中读取所有服务的所有特征,但是这使我犯了这个错误:

[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (24425): PlatformException(read_characteristic_error, unknown reason, may occur if readCharacteristic was called before last read finished., null)
E/flutter (24425): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:547:7)
E/flutter (24425): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:279:18)
E/flutter (24425): <asynchronous suspension>
E/flutter (24425): #2      BluetoothDevice.readCharacteristic (file:///C:/Users/Luciano/Downloads/Anxaneta/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_blue-0.3.3/lib/src/bluetooth_device.dart:56:10)
E/flutter (24425): <asynchronous suspension>
E/flutter (24425): #3      _ListTabState._connectToDevice._readCarachteristics (file:///C:/Users/Luciano/AndroidStudioProjects/my_app/lib/tab_base.dart:125:49)
E/flutter (24425): <asynchronous suspension>
E/flutter (24425): #4      _ListTabState._connectToDevice._showServices (file:///C:/Users/Luciano/AndroidStudioProjects/my_app/lib/tab_base.dart:157:27)
E/flutter (24425): <asynchronous suspension>
E/flutter (24425): #5      _ListTabState._connectToDevice._connect.<anonymous closure> (file:///C:/Users/Luciano/AndroidStudioProjects/my_app/lib/tab_base.dart:197:24)
E/flutter (24425): #6      _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
E/flutter (24425): #7      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:330:11)
E/flutter (24425): #8      _DelayedData.perform (dart:async/stream_impl.dart:578:14)
E/flutter (24425): #9      _StreamImplEvents.handleNext (dart:async/stream_impl.dart:694:11)
E/flutter (24425): #10     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:654:7)
E/flutter (24425): #11     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (24425): #12     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

这是我正在使用的代码:

_readCarachteristics(services) async {
  for (BluetoothService service in services){
    _characteristics = service.characteristics;
    for (BluetoothCharacteristic characteristic in _characteristics) {
      final List<int> value = await _device.readCharacteristic(characteristic);
    }
  }

_services = await device.discoverServices();
_readCarachteristics(_services);

我阅读了以下问题:https://github.com/pauldemarco/flutter_blue/issues/57,但无法解决。感谢您的支持。

已更新

看来,信标发送的特定特征是用特殊方式构成的,这打破了readCharacteristic方法。它们应该包含readDescriptor函数无法读取的两个uuid子类型。

1 个答案:

答案 0 :(得分:1)

共有三种服务,其中第三个用于读取和写入特征。前两个是通用的,第三个是可使用的定制服务。试试这个:

_scanResult.device.discoverServices().then((services){
        services[2].characteristics[0].read();
    });