Пользовательский BroadcastReceiver не получит трансляцию - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть 5 фрагментов в ViewPager (они все находятся в памяти все время, onPause () и так далее никогда не вызываются, пока на экране содержится содержащее действие).

В любом случае мне нужно обновитьодин фрагмент (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() никогда не увольняют).

Любой совет, кто может быть виновником?

1 Ответ

0 голосов
/ 01 апреля 2012

Я использую этот код, который работает хорошо

@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.

...