【问题标题】:Make timer to work in the background on app lock/sleep使计时器在应用程序锁定/睡眠时在后台工作
【发布时间】:2020-06-04 22:13:21
【问题描述】:

问题定义

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

在我的案例中,我不能使用平台暂停和恢复事件,因为只是计算差异并加上时间会在我的用例中提供错误的值。用例说明如下:

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

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

  1. 办公桌处于站立位置。计时器开始运行。
  2. 我锁定了我的手机(创建时间戳 - 在暂停事件触发时)
  3. 我坐了1小时(桌子也有按钮来控制高度,所以当用户使用它来降低高度并且处于坐姿,但手机仍然锁定/睡眠和未收到有关更改的通知)
  4. 我回到站立姿势 20 分钟
  5. 我解锁了我的手机。 (创建第二个时间戳 - 在恢复事件触发时)
  6. 现在它会显示 1 小时 20 分钟的站立时间,即使我只站立了 20 分钟

即使手机处于锁定状态,如何在 ble 设备状态发生变化时唤醒手机或通知?我尝试将脚本包含在 startNotification 方法中,该方法会在调整高度时在数据库中创建一个时间戳。但是,如果手机被锁定/睡眠,这将不起作用。它需要解锁手机才能发送任何数据库更新。

那时我尝试将前台插件 (cordova-plugin-foreground-service) 与后台模式一起使用,但它并没有导致设备状态更改的数据库服务。

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

在这个问题上卡了很久。是否可以像音乐应用程序一样让计时器在后台运行?或者有没有其他方法可以计算出正确的时间?

附言。目前不考虑让手机保持唤醒状态。

【问题讨论】:

    标签: android cordova ionic-framework ionic4 capacitor


    【解决方案1】:

    以下解决方案对我有用。

    您可以尝试Background Mode 插件以在手机的睡眠/锁定/后台模式下运行您的应用。

    https://ionicframework.com/docs/native/background-mode

    并在android平台下config.xml中添加以下权限,使您的代码在各种设备上兼容。

    <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>
    

    【讨论】:

    • 感谢您的解决方案。已经使用后台模式插件的“激活”和“停用”方法解决了这个问题。 :)
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多