首页 > 解决方案 > 当手机处于睡眠/待机模式时,Android App 失去声音/计时

问题描述

几年前我写了一个安卓应用程序,它的过程相当简单。我设置了一个由不同步速(步行、慢跑、冲刺)组成的条件系列,以及与每个部分相关的时间:步行 1 分钟,工作 2 分钟,冲刺 3 分钟。当我按下开始按钮时,该应用程序将显示每个段的倒数计时器、完整的时间计时器和步速(使用 GPS)。有一个显示,但主要特点是该应用程序使用声音告诉我很长时间,直到下一次转换以及接下来会发生什么。

例如,当它启动时,它每秒发出一个声音,持续 5 秒,然后说“2 分钟”。在 30 秒标记处会发出声音。在 1 分钟时它会说“1 分钟”,在 30 秒时会发出另一个声音,然后在改变速度前 10 秒它会说“下一条腿(慢跑)(或步行或冲刺)”并在最后 5 秒播放声音。这样我就不需要看显示器来知道我在我创建的条件程序中的位置。

问题:当我创建并运行它时,我正在运行我现在拥有的当前版本(8.1.0)之后的两个 Android 版本,现在我在 LG Stylo 4 上运行它。那时设备将进入睡眠/待机状态模式,屏幕自动变暗或我按下电源按钮,应用程序将继续正常运行。时间会流逝,声音会准时发出。

这是我第一次在新手机/操作系统上安装和运行我的应用程序,假设它运行不顺利。有一次,我觉得我还剩 30 秒,但一分钟内我什么也没听到。看起来应用程序现在暂停了一半,就像 30 秒变成了超过 1 分钟,并且在过渡时没有声音。

Android 发生了一些变化,在过去的版本中似乎没有发生这种情况。我想要的是让程序在设备切换到睡眠模式时保持实时运行,而当我读到将应用程序从省电模式中排除时,那是行不通的。

即使手机处于睡眠模式,我也可以通过什么方式让这个应用程序在后台运行、倒计时和发出声音。

有问题的具体代码是这样的:

    //runs without a timer by reposting this handler at the end of the runnable
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {

    @Override
    public void run() {

        // do something here to display

        processTime();    // process what to be done on a sec by sec basis
        try {
            timerHandler.postDelayed(this, 1000);
        } catch (Exception ex){

        }

    }
};

我看到帖子提到使用部分唤醒锁或其他版本的计时器,但现在找不到。希望有一个直截了当的答案来解决这个难题。

标签: androidmobile-applicationsleep-mode

解决方案


推荐阅读