如何发送消息从BroadcastReceiver到活动或片段
我有一个接收器,它确实调用细节保存任务,如存储来电,去电等。所有这些细节去sqlite数据库。如果我的活动没有运行,那么它很好。如何发送消息从BroadcastReceiver到活动或片段
有时,当我的活动正在运行时,我收到了一些来电。接收器运行&将数据存储到数据库。 UI不会刷新,因为它从不知道数据库中的更改。
在这里我需要手动告诉接收器,如果活动正在运行刷新屏幕。如何在android中实现这个过程。
我在这个部分有点困惑
你可以在一个activity中创建一个BroadcastReceiver。在onResume()中注册并在onPause()中取消注册。无论何时您的其他接收机接收到广播,也要向该接收机发送广播。如果活动正在运行(即在前面),则会收到广播。在onReceive()中做任何你想要的。
实施例:
BroadcastReceiver br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Do stuff
}
};
另外重写方法:
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(br);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(br, new IntentFilter("intent_filter"));//Use any string for IntentFilter you like
}
可以通过创建内部片段的方法从更新的片段activiy和从片段对象访问它们活动的内部。
您可以使用LocalBroadcastManager到本地广播发送到您的活动(更有效,也比使用一个全球性的广播更安全):
Intent intent = new Intent(action);
LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(context);
mgr.sendBroadcast(intent);
http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
你的活动将必须注册一个BroadcastReceiver处理通信和注销它的onStop:
private BroadcastReceiver mBroadcastReceiver;
mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// do your thing
}
};
LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(this);
mgr.registerReceiver(mBroadcastReceiver, new IntentFilter(action));
中的onStop
:
mgr.unregisterReceiver(mBroadcastReceiver)
现在,这是官方的Android方式来做到这一点。我当然更喜欢使用类似Otto或EventBus的事件/消息总线(https://github.com/greenrobot/EventBus)。您可以使用它们在应用中的不同组件之间广播消息/事件。好处是你不需要访问Context(就像你在使用Broadcast时一样),速度更快,并且它迫使开发人员进行面向对象的编程(因为事件总是对象)。一旦你开始使用一个事件总线,你将永远不会回顾本地广播,你会取代在你的应用程序中使用的许多有时杂乱的观察者/监听器模式。
可否请你告诉我任何示例代码。任何示例都是可喜的。感谢提示。我正在使用列表片段,它需要通知 – Naruto 2014-10-28 15:52:30
@Naruto请参阅编辑。 – berserk 2014-10-28 15:59:49
在这里,我不需要从我的接收器执行任何操作吗?我只需要在您的活动中添加由您引导的代码并尝试一切就好吗? – Naruto 2014-10-28 18:05:56