报警期间暂停服务,之后恢复
Pausing Service during alarm, resuming it afterwards
所以我有一个服务,我希望能够侦听警报并在警报响起时暂时关闭自身 down/pause,然后再自行恢复。我的服务所做的是它在屏幕顶部使用 WindowManager 扩展视图 - 它是一个锁屏应用程序。但因此,它始终位于其他所有内容之上。
这对于使用 PhoneStateListener 的来电来说很容易实现,但我还没有看到任何方便的闹钟 - 我想我可以实现一个 AlarmManager.onAlarmListener 来在闹钟响起后关闭我的服务,但我不确定之后如何重新打开它。
感谢您的帮助!
也许,你可以尝试实现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
}
}
}
终于想通了!
您可以这样获取下一个闹钟的时间:
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());
}
本质上,它的作用是以毫秒为单位获取下一次闹钟的时间,然后 post 下一次闹钟时可运行。
我相信它只适用于 API 21+
所以我有一个服务,我希望能够侦听警报并在警报响起时暂时关闭自身 down/pause,然后再自行恢复。我的服务所做的是它在屏幕顶部使用 WindowManager 扩展视图 - 它是一个锁屏应用程序。但因此,它始终位于其他所有内容之上。
这对于使用 PhoneStateListener 的来电来说很容易实现,但我还没有看到任何方便的闹钟 - 我想我可以实现一个 AlarmManager.onAlarmListener 来在闹钟响起后关闭我的服务,但我不确定之后如何重新打开它。
感谢您的帮助!
也许,你可以尝试实现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
}
}
}
终于想通了!
您可以这样获取下一个闹钟的时间:
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());
}
本质上,它的作用是以毫秒为单位获取下一次闹钟的时间,然后 post 下一次闹钟时可运行。
我相信它只适用于 API 21+