我注册了一个接收器来监听网络事件:
<receiver
android:label="NetworkConnection"
android:name=".ConnectionChangeReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
接收器也很简单:
public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
Log.v("@@@","Receiver : " + activeNetInfo);
} else {
Log.v("@@@","Receiver : " + "No network");
}
}
}
问题是,当Wifi连接时,我会连续收到3条相同的消息,如下所示:
Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
它们全部都是“CONNECTED/CONNECTED”(难道不应该是类似CONNECTING/OBTAINING_IPADDR等的状态吗?),所以问题是如何判断实际连接成功了。我有一些程序需要在wifi真正连接上之后才能运行,我不希望它们连续被调用三次。
PS:3G只发送一条消息,所以这里没有问题。
更新:
看起来这是设备特定的问题。
为了测试,我使用了2个Desire HD和4个随机的Android手机(不同的Aquos型号和一些无名中国品牌)。在DHD和一个随机手机连接wifi时,我收到了3条消息,在其余手机上我只收到了一条消息。真奇怪。