所以我有一个服务,我希望能够听到警报并在警报响起时暂时关闭/暂停,然后继续自我恢复。我的服务所做的是它在屏幕顶部使用WindowManager膨胀视图 - 它是一个锁定屏幕应用程序..但是,因此,它始终位于其他一切之上..
使用PhoneStateListener实现传入呼叫很容易,但我没有看到任何方便的警报 - 我想我可以实现一个AlarmManager.onAlarmListener,一旦警报响起就关闭我的服务,但我是我不知道以后怎么会再把它重新打开。
感谢任何帮助!
答案 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 +