Fragment的BroadcastReceiver onCreate方法不会被调用

时间:2015-10-01 11:46:37

标签: android android-fragments bluetooth android-broadcast localbroadcastmanager

我的Activity中有一个简单的片段,我在其中启用和禁用蓝牙适配器,我想通过Fragment中的BroadcastReceiver收听蓝牙适配器状态更改。原因是我希望在蓝牙状态改变时直接更改Fragment的UI元素。这是我的代码:

public class FragmentBT extends Fragment
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        IntentFilter iFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(BtStateChangedReceiver, iFilter);
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(BtStateChangedReceiver);
    }

    public BroadcastReceiver BtStateChangedReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            ... change UI based on the extra data from intent ...
        }
    }
}

当我使用Fragment的ActionBar中的动作按钮在我的设备中启用或禁用BT时,BT会打开和关闭,但我的接收器永远不会被调用。我从来没有进入接收器的onReceive方法。我知道这是一个非常常见的问题,但是我尝试了几个解决方案,但都没有工作(并且所有这些解决方案都包含在我当前的代码中)。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

试试这个:

getActivity().registerReceiver(BtStateChangedReceiver, iFilter);
getActivity().unregisterReceiver(BtStateChangedReceiver);

docs说' LocalBroadcastManager'用于注册并向您的流程中的本地对象发送Intent的广播。