android - 蓝牙扫描方法 - PendingIntent 或 ScanCallback?

标签 android bluetooth-lowenergy beacon altbeacon

我的应用程序在后台扫描 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 打盹模式已启动
  • ,将错过检测模式匹配丢失的扫描
  • 定期处理扫描结果(如果需要)仍然需要计时器,也许还需要前台服务,从而否定了许多优点
  • 关于android - 蓝牙扫描方法 - PendingIntent 或 ScanCallback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69824452/

    相关文章:

    Android BLE特性getValue返回null

    android - 禁用 Ice Cream Sandwich 的内置拼写检查

    java - Android webview 在弹出窗口中打开目标 ="_blank"url

    Android ActionBar 不显示图像和文本

    iOS 设备作为 iBeacon,为什么不起作用?

    android - 将手机变成信标

    android - 如何在没有我的应用程序的情况下阻止 Eddystone 将内容推送到手机

    java - Android - 单选按钮的共享首选项

    android - 对特征/描述符寻址和 UUID 感到困惑

    ios - BLE 恢复/保存意外效果