5

DefaultHttpClientHttpGetを使用して、サーバーからデータをポーリングします。ここで、ユーザーが Wi-fi ネットワークに接続していて、部屋から出たとします。そのため、電話機は自動的に 3G ネットワークを使用して起動します。そのような変更に対するコールバックはありますか?また、そのような変更をどのように処理する必要がありますか? ポーリングを再度開始する必要がありますか、それとも OS が適切に変更を行うようにしますか

4

2 に答える 2

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

永続的な接続を維持している場合、切断され、再確立する必要があります。

サービスをスケジュールしていて、接続を永続的に維持していない場合、問題は発生しません。

于 2011-03-16T18:21:31.173 に答える
-3

何もする必要はないと思いますが、サーバーの IP アドレスがランダムに配置されていないことを保証する必要があります。つまり、固定の IP アドレスを使用する必要があります。それが私の答えです。

于 2014-12-22T03:23:29.990 に答える