【问题标题】:How to scan for BLE devices in flutter background如何在颤振背景下扫描 BLE 设备
【发布时间】:2020-12-18 04:51:25
【问题描述】:

我正在使用flutter_blue 插件扫描 BLE 设备我有一个压力监控设备,当压力发生变化时它会广播 BLE 信号。我想在我的颤振应用中接收这些值,然后将它们发送到 Firestore。

应用在前台时一切正常,但应用在后台时就不行了。

下面是我的扫描功能

  void scanner() {
   flutterBlue.startScan(timeout: Duration(days: 5));
   flutterBlue.scanResults.listen((results) {
    if (results != null && results.length > 0) {
     for (var i = 0; i < results.length; i++) {
       bool checkpoint1 = results[i].device.id.toString() == frontDevice;
       bool checkpoint2 = results[i].device.id.toString() == rearDevice;

       if (checkpoint1) {
        first = results[i].advertisementData.manufacturerData;
       }

      if (checkpoint2) {
        second = results[i].advertisementData.manufacturerData;
      }

      if (results.length - 1 == i) {

        if (first != null && second != null) {
          deviceData(first, second);
        }

      }

    }
  }
 });
}

【问题讨论】:

  • 您可能必须为此使用isolates。有关后台执行的更多信息,请参阅these docs。

标签: flutter dart-isolates


【解决方案1】:

如果您启动后台服务,请跨平台,除非您需要在应用程序运行时运行此服务(不是作为后台提取,意味着应用程序在前台,但不在主线程)。

如果您需要运行 flutter_blue 插件,请在此处使用此包。如果您尝试运行任何其他插件,它将失败: https://pub.dev/packages/flutter_isolate

此外,如果您需要将其作为后台提取运行,请在此处使用此插件: https://pub.dev/packages/background_fetch

【讨论】:

    【解决方案2】:

    如果您想在后台模式下运行某些东西[当应用程序最小化时],那么您必须深入了解特定于平台的解决方案。至少对于 iOS Isolate 或任何其他解决方案都不起作用,因为在用户最小化应用程序几秒钟后iOS pauses app

    对于 iOS,您需要启用 BackgroundMode 以使 iOS 知道您正在使用特定服务,并且您需要在后台运行应用程序的权限。只有很少的东西可以在后台运行,蓝牙就是其中之一。你需要在 iOS 项目中设置一些东西。在这里您将找到详细信息:https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW7

    对于 Android,您可以使用前台服务来继续运行与蓝牙相关的东西。[请注意,我对 Android 有非常基本的了解。可能有更好的建议]

    对于 Android,有一些限制,例如如果您尝试从除主线程之外的线程编写特性,那么您可能会遇到异常。以下是关于它的一些重要说明:https://github.com/xabre/xamarin-bluetooth-le 具体参考“Caution! Important remarks / API limitations”部分。

    iOS 的注意事项: 据我了解,Isolate 可以在后台线程上运行代码 sn-p,但在应用程序最小化且 iOS 暂停执行源代码时无法运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多