今天要实现监听系统Wifi连接状态,下面代码简化后提取出来的,以备后用。
step1. 编写BroadcastReceiver
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.text.format.Formatter; import android.util.Log; import com.canplay.systemui.QuickSettings; /** * @author ouyangpeng * @link http://blog.csdn.net/ouyang_peng */ public class NetworkReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final String TAG="@@@@@@@@@@@@NetworkReceiver"; ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo net = connectivityManager.getActiveNetworkInfo(); if (net == null) { Log.i(TAG, "无网络连接"); } else { Log.i(TAG, "网络连接类型为" + net.getTypeName()); } // wifi连接状态 State wifi = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_WIFI).getState(); if (wifi == State.CONNECTED || wifi == State.CONNECTING) { Log.i(TAG, "连接wifi"); // wifi管理 WifiManager wifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); StringBuffer sb = new StringBuffer(); sb.append("\n获取BSSID属性(所连接的WIFI设备的MAC地址):" + wifiInfo.getBSSID()); // sb.append("getDetailedStateOf() 获取客户端的连通性:"); sb.append("\n\n获取SSID 是否被隐藏:" + wifiInfo.getHiddenSSID()); // IP地址转化为字符串格式 sb.append("\n\n获取IP 地址:" + Formatter.formatIpAddress(wifiInfo.getIpAddress())); sb.append("\n\n获取连接的速度:" + wifiInfo.getLinkSpeed()); sb.append("\n\n获取Mac 地址(手机本身网卡的MAC地址):" + wifiInfo.getMacAddress()==null?"No Wifi Device":wifiInfo.getMacAddress()); sb.append("\n\n获取802.11n 网络的信号:" + wifiInfo.getRssi()); sb.append("\n\n获取SSID(所连接的WIFI的网络名称):" + wifiInfo.getSSID()); sb.append("\n\n获取具体客户端状态的信息:" + wifiInfo.getSupplicantState()); Log.i(TAG, "连接wifi的信息:\n"+sb.toString()); } else if (wifi == State.DISCONNECTED || wifi == State.DISCONNECTING) { Log.i(TAG, "断开wifi"); } } }
step2. 配置BroadcastReceiver和相关权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 检测网络 --> <receiver android:name=".NetworkReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <!-- 开机启动的广播 --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
下面是通过logcat打印出来的信息
当wifi连接上时候的信息:
I/@@@@@@@@@@@@NetworkReceiver( 1653): 网络连接类型为WIFI I/@@@@@@@@@@@@NetworkReceiver( 1653): 连接wifi I/@@@@@@@@@@@@NetworkReceiver( 1653): 连接wifi的信息: I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取BSSID属性(所连接的WIFI设备的MAC地址):20:dc:e6:71:10:e6 I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取SSID 是否被隐藏:false I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取IP 地址:192.168.1.115 I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取连接的速度:48cc:b2:55:58:f2:02 I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取802.11n 网络的信号:-49 I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取SSID(所连接的WIFI的网络名称):FORMIKE I/@@@@@@@@@@@@NetworkReceiver( 1653): I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取具体客户端状态的信息:COMPLETED
当wifi断开时候的信息:
I/@@@@@@@@@@@@NetworkReceiver( 1653): 无网络连接 I/@@@@@@@@@@@@NetworkReceiver( 1653): 断开wifi
====================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
===================================================================================