我遇到了一个应该对AlarmManager通知作出反应的BroadcastReceiver的问题。我已经阅读了关于这个主题的几个主题,但是找不到任何有用的东西。我一定错过了什么。
我按以下方式设置闹钟:
// Receiver intent
Intent intent = new Intent(mContext, CalendarAlarmReceiver.class);
intent.putExtra(CalendarAlarmReceiver.SHOW, show);
// Sender
PendingIntent sender = PendingIntent.getBroadcast(mContext, hashRequestCode(show), intent, PendingIntent.FLAG_UPDATE_CURRENT);
mPendingAlarmRequests.put(show.getChannel() + show.getName() + show.getStart().toGMTString(), sender);
// Get AlarmManager
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, show.getStart().getTime(), sender);
我创建了一个扩展BroadcastReceiver的CalendarAlarmReceiver类。在onReceive()方法中,我启动状态栏通知,如果应用程序正在运行,该通知可正常工作。但是,如果我通过单击后退按钮退出应用程序直到它关闭,则不再显示通知。
我不确定接收器是否被调用,只是通知不起作用或接收器未被调用。
它已在清单文件中注册:
<receiver android:name=".calendar.CalendarAlarmReceiver" >
</receiver>
我读到这可能不是接收者的错误,而是当应用程序停止时可能会取消警报。如果是这种情况,那么解决方案是在一直在后台运行的服务中设置警报吗?
答案 0 :(得分:4)
警报由操作系统管理,当应用程序“退出”时通常不会清除警报。在接收器中放入一些日志记录并观察logcat输出以确定它是否被调用。如果是,请调试您的通知代码。
答案 1 :(得分:0)
接收者应该有他们正在收听的广播的意图过滤器。正如Nikolay在下面的评论中所提到的,如果您发送明确的意图,则没有必要这样做。所以记住这一点。
<receiver android:name=".calendar.CalendarAlarmReceiver">
<intent-filter>
<action android:name="REFRESH_THIS"/>
</intent-filter>
</receiver>
同样,你意图代码应该在发送时设置一个名为“REFRESH_THIS”的动作。
查看this示例。它解释了整个过程并提供了很好的解释。