ネットワークリスニングによるマルチキャストの問題の解決
1977 ワード
時には、微信やQQに自動再接続機能があるなど、ネットワークの変化を監視するためのプログラムを書く必要があります.単純にブロードキャスト受信とConnectivityManagerでは実現しにくい.gネットワークとwifiを切り替えたり、ネットワークを有効にしたりするたびに、システムはネットワークの変化したブロードキャストを複数回送信するため、ブロードキャスト受信機にビジネスロジックを置いて処理すると、複数回呼び出す必要がない.例えば、wifiを起動すると、システムは複数回のブロードキャストを送信し、ネットワーク接続があるかどうかを判断すると、ネットワークがある(データトラフィックやwifiを起動したばかりの場合)と複数回判断します.これで中のコードが繰り返し実行されます.いろいろ考えた末に思いついた解決策は以下の通り.タグ変数を設定し、少し見るとわかります.
package com.example.mywork;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class InternetState
{
private boolean update = false;
private Date lastConnTime;
OnInternetListener internetListener;
Context context;
protected void setInternetListener(OnInternetListener listener,Context context)
{
internetListener = listener;
if(internetListener==null||context==null)
return ;
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
context.registerReceiver(new NetState(), filter);
}
private class NetState extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo gprs = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo info = connManager.getActiveNetworkInfo();
if(!update&&(wifi.isConnected()||gprs.isConnected()))//
{
update = true;
System.out.println("111111111111111");
}
else if(!wifi.isConnected()&&!gprs.isConnected())//
{
update = false;
}
}
}
}