Android, как обрабатывать изменения в сети (от GPRS до Wi-Fi и наоборот) при опросе данных - PullRequest
6 голосов
/ 02 марта 2011

Я использую DefaultHttpClient и HttpGet для опроса данных с сервера. Теперь, скажем, пользователь был в сети Wi-Fi и выходит из комнаты. Таким образом, телефон автоматически начинает использовать сеть 3G. Есть ли какие-либо обратные вызовы для такого изменения, и как я должен обрабатывать такие изменения. Должен ли я начать опрос снова или ОС позаботится о том, чтобы внести соответствующие изменения

Ответы [ 2 ]

17 голосов
/ 16 марта 2011

Вы можете настроить Receiver в своем манифесте:

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

Если вы сохраняете постоянное соединение, этовыйдет из строя, и вам придется восстановить его.

Если вы планируете службу и не поддерживаете постоянное соединение, у вас не возникнет проблем.

0 голосов
/ 22 декабря 2014

Я думаю, что вам ничего не нужно делать, но вы должны гарантировать, что IP-адрес вашего сервера не расположен случайным образом, то есть у вас должен быть фиксированный IP-адрес. Это мой ответ;

...