如何在Android中处理警报通知?

时间:2010-04-26 12:45:13

标签: android alarm

我正在为Android开发一个媒体播放器应用程序,我需要处理任何警报通知,基于此我将暂停播放。当闹钟处于暂停或解除时,我将恢复播放。

我搜索了很多警报处理,但我发现了通过代码启用警报通知,设置意图然后处理它的方法。但是,我无法在哪里找到处理警报通知部分。我不需要设置警报,它可以由用户设置,我不需要以编程方式。我只需处理该通知。

关于此的任何想法都非常有用吗?

谢谢, Asheesh

3 个答案:

答案 0 :(得分:6)

HI Asheesh Vashishtha,

对此纠正我,但AFAIK无论何时任何其他应用程序即使是闹钟,也会被激活,您的活动肯定会在后台进行。所以我想你可以覆盖OnPauseOnResume函数来放置你的代码。就打盹或其他事情而言,它们都会导致警报活动被破坏(或暂停,不了解它),您的活动将恢复。所以这不是你关心的问题!

希望这会有所帮助......

答案 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);

该线路可帮助您在解除闹钟后点击播放按钮时恢复音频焦点。

当您使用媒体播放器完成后,您还应该放弃音频焦点。我将这行代码放在onStoponDetach方法中。

mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);

它的设置不如您想象的那么多,它允许您在引入意外音频时调整媒体播放器(例如闹钟或计时器熄灭)。