Android 如何将上下文传递给BroadcastReceiver?

Android 如何将上下文传递给BroadcastReceiver?,android,alarmmanager,Android,Alarmmanager,我需要将活动上下文传递给MyAlarmReceiver类的onReceive。为此,我在设置intent时传递上下文: myAlarmManager.set(AlarmManager.RTC_WAKEUP, d.getTime(), PendingIntent.getBroadcast(MainActivity.this, 1, myIntentAlarm, PendingIntent.FLAG_ONE_SHOT)); 但是,onReceive中的上下文与在myAlarm

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

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

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

提供给
BroadcastReceiver
上下文与用于创建
BroadcastReceiver
或任何您可以修改的内容不同。它是
上下文
的有限变体,是框架有意为之的。如果您的
BroadcastReceiver
中有什么重要的事情要做,您需要启动自己的
服务
或使用其他机制来触发它

该上下文用于创建和显示AlertDialog

基于警报触发对话框对用户来说相当危险。您不知道用户当时在做什么,该对话框可能会干扰用户(例如,您在他们的实时逐轮导航会话中弹出一个对话框)。请随时或根据用户偏好使用
通知

除此之外,在警报响起时,您不能再依赖原始的
MainActivity
实例存在。毕竟,很明显,如果您将警报安排在一周后发生,那么您原来的活动实例早就被销毁了


欢迎您在事件总线(
LocalBroadcastManager
、greenrobot的事件总线等)上发布事件。这样,如果您碰巧在前台有UI,它可以显示对话框。而且,如果前台没有UI,可以执行其他操作(例如,显示
通知
)。我有一些示例应用程序展示了这一点。

你想从中获得什么?纳扬·斯利瓦斯塔瓦,谢谢你的快速回复。我需要将此上下文传递给另一个方法,该上下文用于创建和显示AlertDialog.ok,这很有意义,但不可能直接实现。以对话主题打开新的活动。Brian Tompsett,感谢改进格式。感谢提出宝贵建议。我的闹钟应该安排好了