我正在为Android开发一个媒体播放器应用程序,我需要处理任何警报通知,基于此我将暂停播放。当闹钟处于暂停或解除时,我将恢复播放。
我搜索了很多警报处理,但我发现了通过代码启用警报通知,设置意图然后处理它的方法。但是,我无法在哪里找到处理警报通知部分。我不需要设置警报,它可以由用户设置,我不需要以编程方式。我只需处理该通知。
关于此的任何想法都非常有用吗?
谢谢, Asheesh
答案 0 :(得分:6)
HI Asheesh Vashishtha,
对此纠正我,但AFAIK无论何时任何其他应用程序即使是闹钟,也会被激活,您的活动肯定会在后台进行。所以我想你可以覆盖OnPause
和OnResume
函数来放置你的代码。就打盹或其他事情而言,它们都会导致警报活动被破坏(或暂停,不了解它),您的活动将恢复。所以这不是你关心的问题!
希望这会有所帮助......
答案 1 :(得分:1)
AFAIK,您无法收到有关闹钟应用程序功能的通知,除了您收到有关任何其他第三方闹钟的通知外。
请注意AlarmManager
- 您可能正在阅读的内容 - 与闹钟应用程序不同。
抱歉!
答案 2 :(得分:1)
我在开发媒体播放器时遇到了类似的情况。我的解决方案是使用AudioManager' OnAudioFocusChangeListener
。
您可以在类中实现侦听器
public class VideoPlayerHelper implements AudioManager.OnAudioFocusChangeListener {
然后您覆盖onAudioFocusChange
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
//Just fall through by omitting break
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
LogUtil.log(LogUtil.DEBUG, TAG, "AUDIOFOCUS_LOSS or AUDIOFOCUS_LOSS_TRANSIENT"); //Custom logging class
if (isPlaying()) {
pause();
mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
LogUtil.log(LogUtil.DEBUG, TAG, "AUDIOFOCUS_GAIN"); //Custom logging class
break;
default:
break;
}
}
这里的关键是AudioManager.AUDIOFOCUS_LOSS_TRANSIENT
。这是当闹钟响起时听众一直接收的代码(在注释5中)。所以我只是通过暂停媒体播放器并释放音频焦点来处理与AudioManager.AUDIOFOCUS_LOSS_TRANSIENT
相同的AudioManager.AUDIOFOCUS_LOSS
。
当我们设置媒体播放器时,我在添加数据源之前添加了这一行
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
确保您启动媒体播放器的代码中也包含此行(我在启动代码和onResume
代码中有该代码,以防应用程序在后台时闹钟响起)。
mAudioManager.requestAudioFocus(VideoPlayerHelper.this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
该线路可帮助您在解除闹钟后点击播放按钮时恢复音频焦点。
当您使用媒体播放器完成后,您还应该放弃音频焦点。我将这行代码放在onStop
和onDetach
方法中。
mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);
它的设置不如您想象的那么多,它允许您在引入意外音频时调整媒体播放器(例如闹钟或计时器熄灭)。