Android,如何在轮询数据时处理网络变化(从GPRS到Wi-fi,反之亦然)

时间:2011-03-02 08:33:33

标签: android wifi android-networking gprs

我使用DefaultHttpClientHttpGet来轮询来自服务器的数据。现在,假设用户在Wi-Fi网络中并离开了房间。因此手机会自动开始使用3G网络。是否有任何此类更改的回调,以及我应该如何处理此类更改。我是否应该再次开始轮询,或者操作系统是否注意适当地进行更改

2 个答案:

答案 0 :(得分:17)

您可以在清单中设置接收器:

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

使用以下内容实现Receiver

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 android.net.NetworkInfo wifi = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (wifi.isAvailable()) {
      //Do something
    if (mobile.isAvailable()) {
      //Do something else
    }
  }
}

如果要保持持久连接,它将会关闭,您必须重新建立连接。

如果您正在安排某项服务并且没有保持连接的持久性,那么您将不会遇到任何问题。

答案 1 :(得分:-3)

我认为你不需要做任何事情,但是你应该保证服务器的IP地址不是随机排列的,也就是说你应该拥有一个固定的IP地址。这就是我的答案; < / p>