如何将上下文传递给BroadcastReceiver?

时间:2017-02-07 13:51:03

标签: android alarmmanager

我需要将活动上下文传递给onReceive类的MyAlarmReceiver extends BroadcastReceiver。为此,我在设置intent时传递上下文:

myAlarmManager.set(AlarmManager.RTC_WAKEUP, d.getTime(),   
    PendingIntent.getBroadcast(MainActivity.this, 1,
    myIntentAlarm, PendingIntent.FLAG_ONE_SHOT));

但是,onReceive中的上下文与myAlarmManager中传递的上下文不同。为什么呢?

2 个答案:

答案 0 :(得分:1)

提供给Context的{​​{1}}与用于创建BroadcastReceiver或您可以修改的任何内容的内容不同。它是BroadcastReceiver的有限变体,并且是框架故意的。如果您在Context中有任何重要事项,则需要启动自己的BroadcastReceiver或使用其他机制来触发它。

答案 1 :(得分:0)

  

并且此上下文用于创建和显示AlertDialog

基于警报触发对话框对用户来说是相当危险的。您当时不知道用户正在做什么,并且对话框可能会干扰用户(例如,您在实时的逐向导航会话中弹出对话框)。请始终使用Notification或根据用户偏好设置。

除此之外,在闹钟响起时,您不能再依赖原始MainActivity实例了。毕竟,显而易见的是,如果您计划在一周后发生警报,​​那么您的原始活动实例将在销毁后很长时间。

欢迎您在活动巴士上发布活动(LocalBroadcastManager,greenrobot的EventBus等)。这样,如果你碰巧在前台有UI,它就可以显示对话框。而且,如果您碰巧在前台有UI,您可以执行其他操作(例如,显示Notification)。我有示例应用显示此for LocalBroadcastManagerfor greenrobot's EventBus