【问题标题】:Custom BroadcastReceiver won't receive the broadcast自定义 BroadcastReceiver 不会收到广播
【发布时间】:2013-04-01 09:20:05
【问题描述】:

我在 ViewPager 上有 5 个片段(它们一直都在内存中,onPause() 等在包含的 Activity 在屏幕上时永远不会被调用)。

无论如何,我需要根据另一个片段 (TimetableListFragment) 中发生的情况来更新一个片段 (GroupsListFragment)。为此,我正在使用 LocalBroadcastManager 和 BroadcastReceiver。

现在进入相关部分。 注册广播 Intent(严重缩写):

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() 从未被解雇)。

对可能是罪魁祸首的任何建议?

【问题讨论】:

  • updategroupsreciever 是什么样的?编辑:NVM,可能不相关......但我假设你的日志语句检查了?
  • 你在 onPause() 中为 GroupsListFragment 做了什么? b/c 你说 GroupsListFragment 可能会在此时暂停。另外,此时它曾经出现在屏幕上吗?
  • 我假设,把 this.registerReceiver(BroadCastReceiver, IntentFilter);在 onCreate() 方法中尝试

标签: android android-intent broadcastreceiver intentfilter


【解决方案1】:

我正在使用这个运行良好的代码

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

可以在https://github.com/k3b/EzTimeTracker/ 下的BroadCastTest 下找到一个运行最小的示例testapp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多