蓝牙扫描方法 - PendingIntent 或 ScanCallback?

Bluetooth scan methods - PendingIntent or ScanCallback?

我的应用程序在后台扫描 BLE 设备。 我不明白是什么决定了这两种方法之间的选择: 优势/劣势。 (我都测试过并且有效)

public int startScan (List<ScanFilter> filters, 
            ScanSettings settings, 
            PendingIntent callbackIntent)

public void startScan (List<ScanFilter> filters, 
                ScanSettings settings, 
                ScanCallback callback)`

感谢您的帮助

Android 8+ 允许您使用两种不同的消息传递传输蓝牙扫描结果:回调和 Intent。

回调

这会调用您使用扫描结果定义的方法。

优点:

  • 代码中的设置更简单
  • 由于不需要序列化扫描结果数据结构,因此重量更轻(较少 CPU 使用)。如果您预计会有大量检测,这一点尤其重要。
  • 适用于较旧的 Android 版本,而不仅仅是 8+

缺点:

  • 后台扫描通常一次限制为 10 分钟,除非您启动前台服务以使您的应用 运行 处于后台。
  • 检测到后无法在后台重新启动您的应用程序

意图

这会使用 Android 的 Intent 消息结构

将扫描结果传送到 BroadcastReceiver

优点:

  • 在没有前台服务的情况下无限期地在后台提供结果
  • 可以在检测到时重新启动您的应用程序

缺点:

  • 更高的耗电量,尤其是大量扫描结果
  • 更复杂的代码设置
  • 在 Android 8
  • 之前不起作用
  • 如果Android打瞌睡模式已启动,将错过检测模式匹配丢失的扫描
  • 定期(如果需要)处理扫描结果仍然需要计时器,可能还需要前台服务,这会否定许多优点