我想跟踪与 BLE device 的联系即使手机进入休眠状态 - 也有一个回调来跟踪连接/断开连接 BluetoothGattCallback .
按照上面的教程,有一个 Service
public class BluetoothLeService extends Service {
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
//...
}
//...
}
//...
}
要连接我打电话
mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
如您所见,我没有在任何地方获取唤醒锁。
- 那么,如果设备进入休眠状态,回调会发生什么情况?
- 它会被调用吗?或者我需要显式获取唤醒锁。
- 或者可能是 BluetoothDevice在调用回调时注意唤醒设备? (但是我看到它没有在任何地方记录)
最佳答案
只要您的Service
存在 - 回调也将存在。
请记住,该服务可能会被系统自动关闭,特别是当您的应用当前不在后台或内存压力较低时。
我想您不必为此担心唤醒锁,因为系统会为您“自行唤醒”。我会说如果你有一个唤醒锁,你的服务将有更好的机会不被系统停止,但它会花费你 precious battery life, and extra permissions
记住这一点,再加上知道可能发生的“更坏”的想法是您的服务将被停止,得出结论,而不是用唤醒锁解决这个问题,可以用更简单的方法解决:当服务重新启动时执行 gatt 连接!(为此你应该 start it as sticky)。这样您就可以节省电池生命周期,并且不会强制 CPU 处于 Activity 状态。
我正在通过我的应用程序进行持续的后台定期 BLE 扫描,并从 android Service
类连接到 GATT 服务,我没有遇到任何您担心的问题。
所以我建议您在遇到具体问题之前不要担心。
关于android - 是否有可能在设备休眠时调用回调而无需获取唤醒锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29117693/