I wrote a NetworkStateReceiver for check internet state & publish that intent to Activity via Event Bus.
public class NetworkStateReceiver extends BroadcastReceiver {
private static final String TAG = "NetworkStateReceiver";
NetworkEvent networkEvent = null;
@Override
public void onReceive(final Context context, final Intent intent) {
LogMe.e(TAG, "Network connectivity change");
if (intent.getExtras() != null && intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
if (Connectivity.isConnected(context)) {
LogMe.i(TAG, "Network " + Connectivity.getNetworkInfo(context) + " connected");
networkEvent = new NetworkEvent(NetworkEvent.INTERNET_CONNECTED, true);
EventBus.getDefault().post(networkEvent);
} else {
LogMe.i(TAG, "Network " + Connectivity.getNetworkInfo(context) + " not connected");
networkEvent = new NetworkEvent(NetworkEvent.INTERNET_GONE, false);
EventBus.getDefault().post(networkEvent);
}
}
}
}
In activity i Registered Event Bus onStart and unregistered in onPause.
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
broadcastReceiver = new NetworkStateReceiverActivity();
registerReceiver(broadcastReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
unregisterReceiver(broadcastReceiver);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onNetworkEvent(NetworkEvent event) {
textView_internet.setText("" + event.isNetworkStateChanged());
if (event.getTAG() == NetworkEvent.INTERNET_CONNECTED) {
if (event.isNetworkStateChanged()) {
LogMe.i(TAG, "Has Internet ....");
Snackbar.make(getWindow().getDecorView().getRootView(), "Has internet ", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
} else if (event.getTAG() == NetworkEvent.INTERNET_GONE) {
if (!event.isNetworkStateChanged()) {
LogMe.i(TAG, "No Internet ....");
Snackbar.make(getWindow().getDecorView().getRootView(), "No internet", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
}
But the problem is Eventbus called all time through internet is connected or not. I want to call the Eventbus when the user changed network state not all time the activity is created. How to get rid off from that? I also tested only with broadcast receiver in activity, but broadcast received every time when activity created.