我有一個接收器,它確實調用細節保存任務,如存儲來電,去電等。所有這些細節去sqlite數據庫。如果我的活動沒有運行,那麼它很好。如何發送消息從BroadcastReceiver到活動或片段
有時,當我的活動正在運行時,我收到了一些來電。接收器運行&將數據存儲到數據庫。 UI不會刷新,因爲它從不知道數據庫中的更改。
在這裏我需要手動告訴接收器,如果活動正在運行刷新屏幕。如何在android中實現這個過程。
我在這個部分有點困惑
我有一個接收器,它確實調用細節保存任務,如存儲來電,去電等。所有這些細節去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