Flutter Blue Настройка уведомлений - PullRequest
0 голосов
/ 18 октября 2018

Я уже некоторое время использую Flutter Blue, и я застрял на следующем: я использую пример приложения, которое я скачал на https://github.com/pauldemarco/flutter_blue,, здесь основная идея заключается в том, что как только я подключусьна моем устройстве Bluetooth он начинает проверять, существует ли услуга "FFE0", а затем характеристика "FFE1".Эта характеристика выделяет случайные строки, которые мне нужны для моего проекта.

Изображение экрана с открытой характеристикой

Через экран, который я вижу, все выше верно, мне просто нужнокаким-то образом автоматически установить уведомления для характеристики, как только она подключается к устройству Bluetooth.

Это некоторый текущий код, который я тестирую в функции _Connect.

_connect(BluetoothDevice d) async {
    device = d;
    // Connect to device
    deviceConnection = _flutterBlue
        .connect(device, timeout: const Duration(seconds: 4))
        .listen(
      null,
      onDone: _disconnect,
    );

// Update the connection state immediately
    device.state.then((s) {
      setState(() {
        deviceState = s;
      });
    });

// Subscribe to connection changes
    deviceStateSubscription = device.onStateChanged().listen((s) {
      setState(() {
        deviceState = s;
      });
      if (s == BluetoothDeviceState.connected) {
        device.discoverServices().then((service) {
          service.forEach((_service){
            var characteristics = _service.characteristics;
            _service.characteristics.map((c) {
              print(c);
            });
            for(BluetoothCharacteristic _characteristic in characteristics) {
              device.readCharacteristic(_characteristic).then((_value){
                print(_value);
                if (_value.contains("FFE0")) {
                  print("Found!!");
              // do something 
                }
              });
            }
          });
          setState(() {
            services = service;
          });
          _getServices();
        });
      }
    });
  }

Возможно, у меня есть предложение о том, как подойти к моей проблеме.

Робин

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

я обнаружил проблему, если установил несколько уведомлений и прослушал изменения

0 голосов
/ 22 октября 2018

Я нашел https://github.com/Sensirion/smart-gadget-flutter/tree/master/lib и смог исправить проблему, используя следующий код:

      for(BluetoothService service in services) {
        for(BluetoothCharacteristic c in service.characteristics) {
          if(c.uuid == new Guid("0000ffe1-0000-1000-8000-00805f9b34fb")) {
            _setNotification(c);
          } else {
            print("Nope");
          }
        }
      }

Это было добавлено в функцию _connect.

_connect(BluetoothDevice d) async {
    device = d;
// Connect to device
    deviceConnection = _flutterBlue
        .connect(device, timeout: const Duration(seconds: 4))
        .listen(
      null,
      onDone: _disconnect,
    );

// Update the connection state immediately
    device.state.then((s) {
      setState(() {
        deviceState = s;
      });
    });

// Subscribe to connection changes
    deviceStateSubscription = device.onStateChanged().listen((s) {
      setState(() {
        deviceState = s;
      });
      if (s == BluetoothDeviceState.connected) {

        device.discoverServices().then((s) {

         services = s;

          for(BluetoothService service in services) {
            for(BluetoothCharacteristic c in service.characteristics) {
              if(c.uuid == new Guid("0000ffe1-0000-1000-8000-00805f9b34fb")) {
                _setNotification(c);
              } else {
                print("Nope");
              }
            }
          }
          setState(() {
            services = s;
          });
          _getServices();
        });
      }
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...