我使用DefaultHttpClientHttpGet从服务器轮询数据。现在,假设某个用户正在使用Wi-fi网络并离开了房间。因此,手机会自动开始使用3G网络。是否有任何有关此类更改的回叫,以及我应如何处理此类更改。我应该重新开始轮询还是操作系统应注意适本地进行更改?

最佳答案

您可以在 list 中设置接收器:

<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
    }
  }
}

如果保持持久连接,它将断开,您必须重新建立连接。

如果您正在计划服务,并且没有保持连接的持久性,则不会有问题。

关于Android,如何在轮询数据时处理网络变化(从GPRS到Wi-fi,反之亦然),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5165099/

10-13 04:11