我正在尝试显示MaterialDialog或toast,具体取决于通过推送通知收到的消息。然而,我遇到的问题是在WakefulBroadcastReceiver onReceive(Context context,Intent intent)方法中传递的上下文不是应用程序的当前上下文。当我用它创建一个MaterialDialog时,我得到一个错误的窗口令牌错误。有没有人知道从WakefulBroadcastReciever获取当前显示的活动的上下文的方法?
答案 0 :(得分:2)
如果您的活动已打开,则您的BroadcastReceiver可以发送(内部)广播消息。您的活动必须先注册此广播类型(在onResume()中)并在onPause()中注销。然后您的BroadcastReceiver可以使用您的Activity的上下文执行某些操作。
答案 1 :(得分:1)
要添加到基督徒答案,请在收到推送消息时使用此方法发送意图
Intent intent = new Intent("custom-event-name");
// You can also include some extra data.
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
然后在您的活动中通过
收听此事件LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("custom-event-name"));
其中mMessageReceiver是您需要实现onReceive消息的接收器实例。看到这个要点