当应用程序在没有前台服务的情况下处于后台时如何检测蓝牙变化(连接状态和特征)
How to detect bluetooth changes (connection state and characteristic) when app is in background without a foreground service
我有一个带有按钮的简单 BLE 设备,我需要检测用户何时长按设备(通过特性更改),即使应用程序在后台也是如此。
这次点击会触发远程调用服务器。
我有两个问题:
#1 我可以在没有前台服务的情况下实现这个吗?
#2 如果我有前台服务 运行 BLE GATT 回调,我如何检测设备何时再次处于范围内?
我目前的解决方案是让前台服务始终在后台 运行,但这样一来,用户将需要始终显示该应用程序的通知。
1:
是的,您可以通过使用 JobIntentService 在不使用前台服务的情况下实现此目的。
此类服务不需要向您的用户显示通知。
要了解设备按钮何时被点击,您的 JobIntentService 可以扫描 BLE 设备,并且您可以在设备公布的 BLE 数据中包含最后一次点击的标志或时间戳。
为了避免耗尽电池电量,建议您不要连续扫描,而是每分钟只扫描几秒钟。
2:
如果您的 BLE 扫描器收到设备发布的 BLE 数据,则表示设备在范围内。
我有一个带有按钮的简单 BLE 设备,我需要检测用户何时长按设备(通过特性更改),即使应用程序在后台也是如此。
这次点击会触发远程调用服务器。
我有两个问题:
#1 我可以在没有前台服务的情况下实现这个吗?
#2 如果我有前台服务 运行 BLE GATT 回调,我如何检测设备何时再次处于范围内?
我目前的解决方案是让前台服务始终在后台 运行,但这样一来,用户将需要始终显示该应用程序的通知。
1: 是的,您可以通过使用 JobIntentService 在不使用前台服务的情况下实现此目的。
此类服务不需要向您的用户显示通知。
要了解设备按钮何时被点击,您的 JobIntentService 可以扫描 BLE 设备,并且您可以在设备公布的 BLE 数据中包含最后一次点击的标志或时间戳。
为了避免耗尽电池电量,建议您不要连续扫描,而是每分钟只扫描几秒钟。
2: 如果您的 BLE 扫描器收到设备发布的 BLE 数据,则表示设备在范围内。