【问题标题】:Android AlarmManager BroadcastReceiver not working when user exits the application当用户退出应用程序时,Android AlarmManager BroadcastReceiver 不起作用
【发布时间】:2012-10-02 11:31:57
【问题描述】:

我遇到了应该对 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>

我读到这可能不是接收者的错误,而是应用程序停止时可能会取消警报。如果是这种情况,是否可以简单地在后台一直运行的服务中设置警报?

【问题讨论】:

    标签: android broadcastreceiver alarmmanager


    【解决方案1】:

    警报由操作系统管理,通常不会在您的应用程序“退出”时清除。将一些日志记录在您的接收器中并观察 logcat 输出以了解它是否被调用。如果是,请调试您的通知代码。

    【讨论】:

    • 显然,尽管我没有进行任何更改,但通知今天开始弹出。这就是我对 AlarmManager 的理解——一旦我设置了它并注册了接收器,我就不需要再做任何事情了。
    • 调试帮助很大 我认为广播在从隐式意图切换到显式意图后停止工作,但在应用关闭时结束了我的广播接收器逻辑中的错误。
    【解决方案2】:

    接收者应该有他们正在收听的广播的意图过滤器。正如 Nikolay 在下面的评论中提到的,如果您要发送明确的意图,则没有必要这样做。所以请记住这一点。

    <receiver android:name=".calendar.CalendarAlarmReceiver">
        <intent-filter>
            <action android:name="REFRESH_THIS"/>
        </intent-filter>
    </receiver>
    

    同样,您的意图代码应在发送时设置一个名为“REFRESH_THIS”的操作。

    查看this 示例。它用很好的解释解释了整个过程。

    【讨论】:

    • 如果您使用显式意图,您当然不需要添加带有操作的意图过滤器,就像 OP 一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多