2014-10-28 78 views
2

我有一個接收器,它確實調用細節保存任務,如存儲來電,去電等。所有這些細節去sqlite數據庫。如果我的活動沒有運行,那麼它很好。如何發送消息從BroadcastReceiver到活動或片段

有時,當我的活動正在運行時,我收到了一些來電。接收器運行&將數據存儲到數據庫。 UI不會刷新,因爲它從不知道數據庫中的更改。

在這裏我需要手動告訴接收器,如果活動正在運行刷新屏幕。如何在android中實現這個過程。

我在這個部分有點困惑

回答

1

你可以在一個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和從片段對象訪問它們活動的內部。

+0

可否請你告訴我任何示例代碼。任何示例都是可喜的。感謝提示。我正在使用列表片段,它需要通知 – Naruto 2014-10-28 15:52:30

+0

@Naruto請參閱編輯。 – berserk 2014-10-28 15:59:49

+0

在這裏,我不需要從我的接收器執行任何操作嗎?我只需要在您的活動中添加由您引導的代碼並嘗試一切就好嗎? – Naruto 2014-10-28 18:05:56

3

您可以使用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時一樣),速度更快,並且它迫使開發人員進行面向對象的編程(因爲事件總是對象)。一旦你開始使用一個事件總線,你將永遠不會回顧本地廣播,你會取代在你的應用程序中使用的許多有時雜亂的觀察者/監聽器模式。

+0

嗨,幫忙+1,謝謝。你的回答運作良好。非常感謝。我想知道,如果你有任何答案http://stackoverflow.com/questions/26449858/how-long-android-take-to-update-call-details-to-call-log – Naruto 2014-10-28 18:57:09

+0

好吧,因爲你似乎更喜歡劣質的答案(也許是因爲速度更快?)我會傳達你的下一個問題。 – 2014-10-28 19:05:19

+0

好的,很酷,生病的問題問題,讓你知道。謝謝 – Naruto 2014-10-29 04:52:11

相關問題