android - 是否有可能在设备休眠时调用回调而无需获取唤醒锁

标签 android android-service bluetooth-lowenergy android-bluetooth android-wake-lock

我想跟踪与 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);

如您所见,我没有在任何地方获取唤醒锁。

  1. 那么,如果设备进入休眠状态,回调会发生什么情况?
  2. 它会被调用吗?或者我需要显式获取唤醒锁。
  3. 或者可能是 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/

相关文章:

android - Tabs + ViewPager + FragmentStatePagerAdapter - 如何删除 fragment ?

android - 如何在任何点击事件上关闭键盘?

Android服务多线程和startForeground()

bluetooth-lowenergy - 是否有任何 SDK 可以控制 Sphero Mini?

flutter - 在 Flutter 中解码 BLE 设备负载

raspberry-pi - 即使可以使用 hcitool lescan 发现设备,BLE gatttool 也无法连接

android - 解释不同的导航类型,Android

android - 我们可以使用大于 64 位的空间在 sqlite 中存储 bigint 数据类型吗

android - onSensorChanged 在 sleep 后约 5 分钟不工作,直到应用程序打开。

android - 在前台启动两个服务?