检测到互联网连接时下载数据

时间:2014-01-21 05:51:44

标签: android broadcastreceiver downloading

每当互联网连接可用时,我想下载一些数据,包括json和图像(二进制数据)。

我有一个完整的工作代码可以做到这一点。问题是我在自定义应用程序类中编写了该代码。下载并在本地保存。但是当应用程序启动时,互联网连接可能在那个时间点不可用。

所以我想做的是在检测到互联网连接时发送请求并下载数据,并通过在本地保存到内容提供商中来使用该数据。即使没有互联网连接,该应用程序也能正常运行。

我正在考虑使用广播接收器来下载它。但是,广播接收器下载数据将是一项繁重的任务。所以现在我发现的是我可以检查广播接收器中的互联网连接,我将从其他组件下载数据。这样做的最佳做法是什么?

即使应用程序未开启,广播接收器是否仍然存在?

2 个答案:

答案 0 :(得分:4)

  

这样做的最佳做法是什么?

最好的方法是使用IntentService

从BroadcastReceiver启动此服务。通过IntentService,所有请求都在一个工作线程上处理 - 它们可能需要多长时间(并且不会阻止应用程序的主循环),因此不必担心任务的持续时间。

  

即使应用程序未开启,广播接收器是否仍然存在?

是的,如果他们是通过清单注册的。


有用的资源

  1. Creating a Background Service
  2. IntentService Basics

答案 1 :(得分:1)

在android开发者指南中提到你可以Monitor for Changes in Connectivity

1st - 您创建了一个BroadCastReceive的NetworkChangeReceiver类,您可以在其中实现代码以下载所需内容:

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");
    }
  }
}

第二 - 您在清单文件中注册了BroadCastReceiver,如下所示:

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

            </intent-filter>
 </receiver>