让定时器在后台工作的应用锁睡。

问题描述 投票:0回答:1

问题定义

应用是一个ionic4电容应用,也使用了一些cordova插件。我有一个与蓝牙设备相关联的定时器功能,即使在手机进入睡眠或锁定模式时也必须保持运行。使用cordova-background-mode插件,应用可以在后台运行,但一旦手机锁定或睡眠,定时器就会停止工作。当屏幕恢复时,定时器从停止的地方继续工作。

我不能在我的案例中使用平台的暂停和恢复事件,因为只是取差值和时间相加会提供错误的值与我的用例。下面解释一下这个用例。

这个应用是和通过蓝牙连接的高度调节台一起使用的,当用户站立时,可以使用这个应用来调节高度,并跟踪时间。当桌子达到一定的高度时,计时器开始运行--使用ble的startNotification方法实现)。高度调节的桌子也有按钮来控制它的高度。

用例(为什么我不能使用平台恢复和暂停事件以及时间戳) 。

  1. 桌子处于站立位置。计时器开始运行。
  2. 我锁定了我的手机(时间戳创建--在暂停事件触发时)。
  3. 我进入坐姿1h(桌子上也有控制高度的按钮,所以指的是当用户使用该按钮降低高度,并处于坐姿时,但手机仍处于锁屏睡眠状态,并没有被通知变化
  4. 我回到站立位置20分钟
  5. 我解锁了我的手机。(创建第二个时间戳 - 在恢复事件触发器上)
  6. 现在它将显示1小时20分钟的站立时间,即使我只站了20分钟。

我怎样才能在设备状态发生变化时唤醒手机或发出通知,即使手机被锁定?我试过在startNotification方法中加入脚本,当高度调整时,会在DB中创建一个时间戳。但如果手机处于锁定睡眠状态,这个方法就不起作用了。它需要手机解锁才能发送任何DB更新。

这时我试着使用前台插件(cordova-plugin-foreground-service)和后台模式,但它并没有导致设备状态变化的DB服务。

预期的行为定时器应该像音乐播放器应用一样在后台运行,即使在手机锁定时也会继续播放。或者它应该能够在设备的状态变化时创建一个DB调用。以上任何一种方法都可以,但必须跟踪正确的时间。

在这个问题上已经纠结了很久。有没有可能像音乐应用一样,让定时器在后台运行?还是有其他方法可以计算出正确的时间?

Ps. 目前不考虑让手机保持清醒。

android cordova ionic-framework ionic4 capacitor
1个回答
0
投票

下面的解决方案对我来说是有效的。

你可以尝试 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>
© www.soinside.com 2019 - 2024. All rights reserved.