Download data when internet connectivity is detected

狂风中的少年 提交于 2019-12-02 09:32:41

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

  1. Creating a Background Service
  2. IntentService Basics

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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!