蓝牙扫描方法 - 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打瞌睡模式已启动,将错过检测模式匹配丢失的扫描
- 定期(如果需要)处理扫描结果仍然需要计时器,可能还需要前台服务,这会否定许多优点
我的应用程序在后台扫描 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打瞌睡模式已启动,将错过检测模式匹配丢失的扫描
- 定期(如果需要)处理扫描结果仍然需要计时器,可能还需要前台服务,这会否定许多优点