问题定义
应用是一个ionic4电容应用,也使用了一些cordova插件。我有一个与蓝牙设备相关联的定时器功能,即使在手机进入睡眠或锁定模式时也必须保持运行。使用cordova-background-mode插件,应用可以在后台运行,但一旦手机锁定或睡眠,定时器就会停止工作。当屏幕恢复时,定时器从停止的地方继续工作。
我不能在我的案例中使用平台的暂停和恢复事件,因为只是取差值和时间相加会提供错误的值与我的用例。下面解释一下这个用例。
这个应用是和通过蓝牙连接的高度调节台一起使用的,当用户站立时,可以使用这个应用来调节高度,并跟踪时间。当桌子达到一定的高度时,计时器开始运行--使用ble的startNotification方法实现)。高度调节的桌子也有按钮来控制它的高度。
用例(为什么我不能使用平台恢复和暂停事件以及时间戳) 。
我怎样才能在设备状态发生变化时唤醒手机或发出通知,即使手机被锁定?我试过在startNotification方法中加入脚本,当高度调整时,会在DB中创建一个时间戳。但如果手机处于锁定睡眠状态,这个方法就不起作用了。它需要手机解锁才能发送任何DB更新。
这时我试着使用前台插件(cordova-plugin-foreground-service)和后台模式,但它并没有导致设备状态变化的DB服务。
预期的行为定时器应该像音乐播放器应用一样在后台运行,即使在手机锁定时也会继续播放。或者它应该能够在设备的状态变化时创建一个DB调用。以上任何一种方法都可以,但必须跟踪正确的时间。
在这个问题上已经纠结了很久。有没有可能像音乐应用一样,让定时器在后台运行?还是有其他方法可以计算出正确的时间?
Ps. 目前不考虑让手机保持清醒。
下面的解决方案对我来说是有效的。
你可以尝试 Background Mode
插件,让你的应用程序在手机的SleepLockBackground模式下运行。
https:/ionicframework.comdocsnativebackground-mode。
并在下面的权限中添加 config.xml
在android平台下,让你的代码兼容各种设备。
<platform name="android"> // add below line in here
<config-file parent="./" target="app/src/main/AndroidManifest.xml" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</config-file>