2012-04-01 15 views
0

我在ViewPager上有5個片段(它們全部在內存中,onPause()等包含Activity在屏幕上時不會調用)。自定義BroadcastReceiver將不會收到廣播

無論如何,我需要更新一個片段(GroupsListFragment)取決於另一個(TimetableListFragment)發生了什麼。我爲此使用了LocalBroadcastManager和BroadcastReceiver。

現在進入相關部分。 註冊的廣播意圖(嚴重略):

public class GroupsListFragment extends Fragment { 
     @Override 
     public void onResume() { 
      super.onResume(); 
      mBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); 
      mBroadCastReceiver = new UpdateGroupsReceiver(this); 
      IntentFilter iFilter = new IntentFilter(UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION); 
      Log.d("GroupsListFragment", "Registering for receiver with intentfilter:[action=" + iFilter.getAction(0) + "]"); 
      mBroadcastManager.registerReceiver(mBroadCastReceiver, iFilter); 
     } 
} 

發送廣播(再次嚴重略):

public class TimetableListFragment extends Fragment { 
    public void updateStatus() { 
     Intent intent = new Intent(UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION); 
     mBroadcastManager.sendBroadcast(intent); 
     Log.d(TAG, "Sending broadcast with intent:[action=" + intent.getAction() + "]"); 
    } 
} 

的問題是,我UpdateGroupsReceiver從來沒有收到它(onReceive()是從來沒有發射) 。

任何有關可能是罪魁禍首的建議?

+0

updategroupsreciever是什麼樣子的?編輯:NVM,可能不相關......但我假設你的日誌語句簽出? – JRaymond 2012-04-01 18:03:35

+0

你在做什麼onPause()爲GroupsListFragment? B/C你說GroupListFragment可能暫停在這一點上。此外,它有**有史以來**現在在屏幕上出現? – JRaymond 2012-04-01 18:14:18

+0

我假設,把this.registerReceiver(BroadCastReceiver,IntentFilter);在onCreate()方法中嘗試 – Selva 2012-08-08 07:09:54

回答

0

我使用這個代碼,運作良好

@Override 
public void onResume() { 
    super.onResume(); 
    if (myReceiver == null) { 
     myReceiver = new UpdateGroupsReceiver(this); 
     IntentFilter filter = new IntentFilter(
       UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION); 
     registerReceiver(myReceiver, filter); 
    } 
} 

public void updateStatus() { 
    Intent intent = new Intent(); 
    intent.setAction(UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION); 
    sendBroadcast(intent); 
} 

一個運行過程中出現小例子testapp可以在https://github.com/k3b/EzTimeTracker/BroadCastTest下找到。