我正在为 Android 开发一个媒体播放器应用程序,我需要为此处理任何警报通知,并基于此我将暂停播放。当闹钟暂停或关闭时,我将恢复播放。
我在 Google 上搜索了很多关于警报处理的信息,但我发现了通过代码启用警报通知、设置意图然后处理它的方法。但是,我无法找到仅处理警报通知部分的位置。我不需要设置警报,它可以由用户设置,我不需要以编程方式。我所需要的只是处理那个通知。
对此有什么想法会非常有用吗?
谢谢,阿希什
嗨,阿希什·瓦希什塔,
请纠正我,但是当任何其他应用程序(即使是闹钟)被激活时,AFAIK 肯定会在后台运行。所以我想你可以覆盖OnPause
andOnResume
函数来放置你的代码。就贪睡或其他事情而言,它们都会导致警报活动被破坏(或暂停,对此不太了解),您的活动将被恢复。所以这不会是你关心的问题!
希望这可以帮助...
AFAIK,您无法收到有关闹钟应用程序功能的通知,就像您收到有关任何其他第三方闹钟的通知一样。
请注意AlarmManager
- 您可能正在阅读的内容 - 与闹钟应用程序不同。
对不起!
我在开发媒体播放器时遇到了类似的情况。我的解决方案是使用 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
。这是当闹钟响起时听众不断收到的代码(在 Note 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
andonDetach
方法中。
mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);
它没有您想象的那么多设置,它允许您在引入意外音频时调整您的媒体播放器(例如闹钟或计时器响起)。