【发布时间】:2012-01-14 19:27:29
【问题描述】:
我注册了一个监听网络事件的接收器:
<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 部随机的安卓手机(不同的 Aquos 型号和一些无名中文的东西)。在 DHD 和 wifi 连接上的一部随机手机上,我收到 3 条消息,在其余手机上,我只收到一条消息。见鬼。
【问题讨论】:
-
日志之间的时间间隔是多少?你能看到事件发生时的 currentTimeMillis() 吗?我想知道它们是否发生得如此紧密,以至于 getActiveNetworkInfo() 实际上返回了同一个对象(一个静态对象),该对象被记录了 3 次。
-
17:51:50.023 17:51:50.414 17:51:50.617
-
我拿了你的代码并在我的手机(三星 Galaxy S2)上试了一下。它正在提供与移动网络和 wifi 相关的消息。当我关闭数据包数据时,每次打开或关闭 wifi 时我只会收到一条消息。奇怪的是,你的消息都一样,而我的却都不同。
-
嗯,看到了..我会尝试只用这个接收器制作干净的项目,看看会发生什么。
-
哇,是的,我是设备问题。我更新了我的问题。
标签: android networking wifi broadcastreceiver