0

I have implemented a NetworkChangeReceiver which looks like this:

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        final ConnectivityManager connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo wifi = connectionManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        logMessage(context, "Network State has changed.");
        if (!wifi.isAvailable()) {
            logMessage(context, "Golly gosh. WiFi has gone away.");
        }
    }


    private void logMessage(Context context, String message) {
        Intent intent = new Intent("logging-event");
        intent.putExtra("message", message);
        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
    }
}

In my activity I have added a broadcast receiver as well:

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
          String message = intent.getStringExtra("message");
          logMessages.add(message);
      }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);

    LocalBroadcastManager
            .getInstance(this)
            .registerReceiver(mMessageReceiver, new IntentFilter(("logging-event")));
}

AndroidManifest.xml

   <receiver android:name=".NetworkChangeReceiver"
        android:label="NetworkChangeReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
    </receiver>

For reasons unknown, the onReceive method on the activity is not invoked though. Any idea why this could be? Maybe because of a different context used in the logging method? If I use a simple toast it comes through and also if I use the same logging method in a service where I can use the service itself as the context.

Mahoni
  • 7,088
  • 17
  • 58
  • 115

2 Answers2

0

Did you register the intent in your AndroidManifest.xml? That would be the first thing I'd check.

If not that, verify that you have the appropriate permissions:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
ajacian81
  • 7,419
  • 9
  • 51
  • 64
0

Try using registerReceiver() method of Activity instead of using LocalBroadcastManager

maohieng
  • 1,646
  • 1
  • 19
  • 26