吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5943|回复: 12
收起左侧

[其他转载] Android判断手机网络状态

[复制链接]
潜伏者的破解 发表于 2014-11-12 20:35
本帖最后由 潜伏者的破解 于 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:都是为了账号活跃度

免费评分

参与人数 1热心值 +1 收起 理由
杨兽兽 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 潜伏者的破解 发表于 2014-11-12 20:51
第一次发帖,自己先顶一下
ge443999374 发表于 2014-11-12 20:55
 楼主| 潜伏者的破解 发表于 2014-11-12 20:58
manbajie 发表于 2014-11-12 21:36
这么强悍的东西哈  支持个
萝卜丶 发表于 2014-11-12 21:49 来自手机
哦哦,看看~~
罪恶之恋 发表于 2014-11-12 22:10 来自手机
小哥,你还能再牛一点吧
csr006 发表于 2014-11-13 14:29
敢不敢发完整一点的代码,把判断2/3G 网络什么的也加上。。。
SN酸奶 发表于 2014-11-13 14:40 来自手机
支持。可惜看不懂
caozhuang 发表于 2014-11-13 14:58 来自手机
不懂  这个有啥用处
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表