'Cannot resolve method registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter) in Fragment class

//here my code
//used this IntentFilter

IntentFilter filter = new IntentFilter();

filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

//this method cannot be resolve

registerReceiver(mReceiver, filter);


Solution 1:[1]

You can do that in Fragment:

getActivity().registerReceiver(receiver, filter);

Solution 2:[2]

registerReceiver is the method found in Context class. Fragment does not extend it, but the Activity does. That's why you can use it like this:

registerReceiver.(receiver, filter);

In the activity, but you must call it on a context from the Fragment either like this:

getActivity().registerReceiver(receiver, filter);

Or even better in onAttach

@Override
public void onAttach(Context context) {
      context.registerReceiver(receiver, filter);
}

Solution 3:[3]

This works for me :

getActivity().registerReceiver(receiver, filter);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Master Disaster
Solution 2 Vucko
Solution 3 Ali Talaourar