I want to download some data including json and image(binary data) whenever internet connectivity is available.
I have a full working code which can do that. The problem
in the android developer guide mentioned you can Monitor for Changes in Connectivity
1st - you create a NetworkChangeReceiver class that is a BroadCastReceive , where you implement your code to download what you want :
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();
boolean isConnected = wifi != null &&
wifi.isConnected() ;
if (isConnected ) {
// Do something
Log.d("Netowk Available ", "Flag No 1");
}
}
}
2nd - you register your BroadCastReceiver
in the manifest file like the following :
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Which is the best practice to do so?
Best way is to use IntentService.
Start this service from your BroadcastReceiver. Via IntentService, all requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), so no worry about how long your task is.
Is broadcast receiver stays around even when application is not on?
Yes, if they are registered via manifest.
Helpful resources are