在闹钟期间暂停服务,之后恢复

时间:2016-07-28 13:11:10

标签: android alarmmanager alarm resume pausing-execution

所以我有一个服务,我希望能够听到警报并在警报响起时暂时关闭/暂停,然后继续自我恢复。我的服务所做的是它在屏幕顶部使用WindowManager膨胀视图 - 它是一个锁定屏幕应用程序..但是,因此,它始终位于其他一切之上..

使用PhoneStateListener实现传入呼叫很容易,但我没有看到任何方便的警报 - 我想我可以实现一个AlarmManager.onAlarmListener,一旦警报响起就关闭我的服务,但我是我不知道以后怎么会再把它重新打开。

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

也许,您可以尝试实现AudioManager.OnAudioFocusChangeListener https://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html

 @Override
    public void onAudioFocusChange(int i) {
            if (i <= 0 && i != -3) {
               // pause
            } else if (i > 0) {
               // resume
            }
        }
    }

答案 1 :(得分:1)

终于明白了!

你可以像下面这样得到下一次闹钟的时间:

  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  alarmManager.getNextAlarmClock().getTriggerTime()

所以只需将此添加到您的服务onCreate方法:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        if (alarmManager.getNextAlarmClock() != null) {
            UIHandler.postAtTime(new Runnable() {
                @Override
                public void run() {
                    stopSelf();
                }
            }, alarmManager.getNextAlarmClock().getTriggerTime());
        }

基本上它的作用是以毫秒为单位获取下一次警报的时间,然后在下一次警报时发布一个可运行的警报。

我相信它只适用于API 21 +