【发布时间】:2020-06-04 22:13:21
【问题描述】:
问题定义
App 是一个 ionic4 电容器应用程序,它也使用了少量的 cordova 插件。我有一个与蓝牙设备相关的定时器功能,即使手机进入睡眠状态或处于锁定模式,它也必须保持运行。使用 cordova-background-mode 插件,该应用程序在后台运行,但一旦手机被锁定或处于睡眠状态,计时器就会停止工作。当屏幕恢复时,计时器从它停止的地方继续。
在我的案例中,我不能使用平台暂停和恢复事件,因为只是计算差异并加上时间会在我的用例中提供错误的值。用例说明如下:
此应用与通过蓝牙连接的高度调节表一起使用,用户可以使用该应用调整高度并跟踪他站立的时间。 (当桌子达到一定高度时计时器开始运行 - 使用 ble 的 startNotification 方法实现)。高度调节台也有按钮来控制它的高度。
用例(为什么我不能使用平台恢复和暂停事件以及时间戳):
- 办公桌处于站立位置。计时器开始运行。
- 我锁定了我的手机(创建时间戳 - 在暂停事件触发时)
- 我坐了1小时(桌子也有按钮来控制高度,所以当用户使用它来降低高度并且处于坐姿,但手机仍然锁定/睡眠和未收到有关更改的通知)
- 我回到站立姿势 20 分钟
- 我解锁了我的手机。 (创建第二个时间戳 - 在恢复事件触发时)
- 现在它会显示 1 小时 20 分钟的站立时间,即使我只站立了 20 分钟
即使手机处于锁定状态,如何在 ble 设备状态发生变化时唤醒手机或通知?我尝试将脚本包含在 startNotification 方法中,该方法会在调整高度时在数据库中创建一个时间戳。但是,如果手机被锁定/睡眠,这将不起作用。它需要解锁手机才能发送任何数据库更新。
那时我尝试将前台插件 (cordova-plugin-foreground-service) 与后台模式一起使用,但它并没有导致设备状态更改的数据库服务。
预期行为 计时器应该像音乐播放器应用程序一样在后台运行,即使在手机锁定时也会继续播放。或者它应该能够在设备状态更改时创建数据库调用。上述任何一种方法都可以,但必须跟踪正确的时间。
在这个问题上卡了很久。是否可以像音乐应用程序一样让计时器在后台运行?或者有没有其他方法可以计算出正确的时间?
附言。目前不考虑让手机保持唤醒状态。
【问题讨论】:
标签: android cordova ionic-framework ionic4 capacitor