本帖最后由 潜伏者的破解 于 2014-11-12 20:50 编辑
判断手机WiFi连接状态的两种方法:
首先,注册广播:[Java] 纯文本查看 复制代码 <receiver android:name=".WiFiReceiver">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
方法一:(android.net.wifi.WIFI_STATE_CHANGED)
[Java] 纯文本查看 复制代码 if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch(wifiState) {
case WifiManager.WIFI_STATE_DISABLED:
Log.i(TAG,"WiFi状态:断开,状态值:" + wifiState);
break;
case WifiManager.WIFI_STATE_DISABLING:
Log.i(TAG,"WiFi状态:正在断开, 状态值:" + wifiState);
break;
case WifiManager.WIFI_STATE_ENABLED:
Log.i(TAG,"WiFi状态:连接,状态值" + wifiState);
break;
case WifiManager.WIFI_STATE_ENABLING:
Log.i(TAG,"WiFi状态:连接中,状态值" + wifiState);
break;
}
}
打开WiFi,Log日志显示内容
[Java] 纯文本查看 复制代码 04-18 15:37:15.895: I/WiFiReceiver(5398): WiFi状态:连接中,状态值2
04-18 15:37:17.105: I/WiFiReceiver(5398): WiFi状态:连接,状态值3
关闭 WiFi,Log日志显示内容
[Asm] 纯文本查看 复制代码 04-18 15:31:27.020: I/WiFiReceiver(5398): WiFi状态:正在断开, 状态值:0
04-18 15:31:27.405: I/WiFiReceiver(5398): WiFi状态:断开,状态值:1
日志结果显示,打开和关闭WiFi分别接收到两次android.net.wifi.WIFI_STATE_CHANGED广播
方法二:(android.net.wifi.STATE_CHANGED)
[Java] 纯文本查看 复制代码 if(WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(null != parcelableExtra) {
NetworkInfo networkInfo = (NetworkInfo)parcelableExtra;
State state = networkInfo.getState();
if(State.CONNECTED == state) {
Log.i(TAG, "State.CONNECTED");
}
if(State.CONNECTING == state) {
Log.i(TAG, "State.CONNECTING");
}
if(State.DISCONNECTED == state) {
Log.i(TAG, "State.DISCONNECTED");
}
if(State.DISCONNECTING == state) {
Log.i(TAG, "State.DISCONNECTING");
}
}
}
开启WiFi,Log日志显示结果
[Java] 纯文本查看 复制代码 04-18 17:00:47.856: I/WiFiReceiver(21518): State.CONNECTING
04-18 17:00:48.825: I/WiFiReceiver(21518): State.CONNECTED
关闭WiFi,Log日志显示结果
[Java] 纯文本查看 复制代码 04-18 17:02:16.541: I/WiFiReceiver(21518): State.DISCONNECTED
从结果看,打开WiFi时,接收到两次android.net.wifi.STATE_CHANGED广播,关闭WiFi时接收到一次广播
判断手机网络状态(包括WiFi和数据流量)
注册广播:
[Java] 纯文本查看 复制代码 <intent-filter>
<!-- 这个广播反应比较慢 -->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
</intent-filter>
[Java] 纯文本查看 复制代码 ///判断网络连接状态
if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
State wifiState = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
State gprsState = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
Log.i(TAG, "WiFi链接状态:" + wifiState + ", 蜂窝数据链接状态:" + gprsState);
if(State.CONNECTED == wifiState || State.CONNECTED == gprsState) {
Log.i(TAG, "手机网络被打开");
}
}
先打开数据流量
[Java] 纯文本查看 复制代码 04-18 20:03:52.580: I/NetChangeReceiver(10163): WiFi链接状态:DISCONNECTED, 蜂窝数据链接状态:CONNECTED
此时再打开WiFi,Log日志显示如下
[Java] 纯文本查看 复制代码 04-18 19:41:16.865: I/NetChangeReceiver(10163): WiFi链接状态:CONNECTED, 蜂窝数据链接状态:DISCONNECTED
04-18 19:41:16.865: I/NetChangeReceiver(10163): 手机网络被打开
上面结果显示,在手动都打开WiFi和数据流量时,手机会优先使用WiFi网络,将数据流量关闭(虽然手机流量图标显示开启状态)
接着我们再关闭WiFi,Log日志显示如下
[Java] 纯文本查看 复制代码 04-18 20:06:13.610: I/NetChangeReceiver(10163): WiFi链接状态:DISCONNECTED, 蜂窝数据链接状态:CONNECTED
04-18 20:06:13.610: I/NetChangeReceiver(10163): 手机网络被打开
可以看出,在WiFi关闭时,数据流量有恢复到连接的状态。
显示结果看,打开或关闭WiFi网络只收到一次广播(数据流量也是如此),只有在手机网络已经打开或者已经关闭的状态下,才能系统才发送android.net.conn.CONNECTIVITY_CHANGE广播。不会再正在打开和正在关闭状态下产生android.net.conn.CONNECTIVITY_CHANGE广播。
此广播相对于前面提到的两个广播,响应速度慢了2~3倍。
上面是以前学Android时整理的代码,现在共享出来给大家, 不喜请点关闭按钮,不送...PS:都是为了账号活跃度
|