j0ntech
j0ntech

Reputation: 1168

Custom BroadcastReceiver won't receive the broadcast

I have 5 fragments on a ViewPager (they're all in memory all the time, onPause() and such are never called while the containing Activity is on screen).

Anyway, I need to update one fragment (GroupsListFragment) depending on what's happening in another one (TimetableListFragment). I'm using LocalBroadcastManager and a BroadcastReceiver for this.

Now on to the relevant parts. Registering for the broadcast Intent (severely abbreviated):

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);
        }
}

Sending the broadcast (once again severely abbreviated):

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() + "]");
    }
}

The problem is that my UpdateGroupsReceiver never receives it (onReceive() is never fired).

Any advice on what might be the culprit?

Upvotes: 0

Views: 2295

Answers (1)

k3b
k3b

Reputation: 14755

I am using this code that is working well

@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);
}

A runnig minimal example testapp can be found at https://github.com/k3b/EzTimeTracker/ under BroadCastTest.

Upvotes: 1

Related Questions