Android N not sending android.net.conn.CONNECTIVITY_CHANGE broadcast?

DanMD picture DanMD · Aug 22, 2016 · Viewed 18.4k times · Source

I have defined a receiver in a sandbox Android N application:

<receiver
    android:exported="true"
    android:name="com.sandboxapplication.NetworkReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

It's rather simple:

public class NetworkReceiver extends BroadcastReceiver {
    private static final String TAG = NetworkReceiver.class.getName();
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Received Network Change event.");
    }
}

This receiver is working fine if in my build.gradle file my targetSdkVersion is 23. However, if I set my targetSdkVersion to 24, the receiver never receives anything. In fact if I place a debug break point in my receiver Android Studio gives me the visual indication that it looks like the class is never even loaded into memory.

Did I miss something very basic in the Android N documentation? Is there a new way to detect connectivity change events?

Answer

Ambar Jain picture Ambar Jain · Apr 19, 2017

Use this code to register receiver in your Activity or in Application class

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTI‌​ON); 
registerReceiver(new NetworkConnectionReceiver(), intentFilter); 

Where NetworkConnectionReceiver is a class extended by BroadcastReceiver. Just add this class in your app and perform action in onReceive(Context context, Intent intent) method.

Note: If you register this receiver in an Activity, don't forget to unregister it.