1

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

这很容易使用 PhoneStateListener 来实现来电,但我还没有看到任何对警报有用的东西 - 我想我可以实现一个 AlarmManager.onAlarmListener ,一旦警报响起就会关闭我的服务,但我不确定之后我将如何重新打开它。

感谢您的帮助!

4

2 回答 2

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
            }
        }
    }
于 2017-01-29T09:51:16.243 回答
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+

于 2017-01-29T19:26:38.983 回答