自定义BroadcastReceiver将不会收到广播

时间:2012-04-01 14:18:28

标签: android android-intent broadcastreceiver intentfilter

我在ViewPager上有5个片段(它们全部都在内存中,onPause(),并且在屏幕上包含Activity时从不调用它们。)

无论如何,我需要更新一个片段(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 :(得分: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