摘要Android提供了android.net.wifi包供我们操作WiFi。首先介绍一下几个类: WifiManager :提供了管理WiFI连接的大部分API ScanResult :已经检测出的接入点(包括接入点的地址、名称、身份认证、频率、信号强度) WifiConfiguration :WiFi连接的网络配置(包

Android提供了android.net.wifi包供我们操作WiFi。首先介绍一下几个类:

WifiManager:提供了管理WiFI连接的大部分API

ScanResult:已经检测出的接入点(包括接入点的地址、名称、身份认证、频率、信号强度)

WifiConfiguration:WiFi连接的网络配置(包括安全配置等)

WifiInfo:WiFI无线连接的描述(包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等等)

WifiManager.WifiLock:允许应用程序一直使用WiFI无线网络,通常情况下当用户在一段时间内没有任何操作的时候,WiFi网络会自动关闭。我们使用WifiLock来锁定WiFi网络,使其一直保持连接,直到这个锁被释放。多个应用程序可能有多个锁,当多有的应用程序的锁都被释放的时候,WiFi才被关闭。

下面我们通过代码理解WiFI的使用:

通过以下代码获得WifiManager对象(Wifi是系统的一项服务)

1 WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

打开WiFi

1 2 3 4 5 public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled( true ); } }

关闭WiFi

1 2 3 4 5 public void closeWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled( false ); } }

创建一个WifiLock

1 2 3 public void creatWifiLock() { mWifiLock = mWifiManager.createWifiLock( "Test" ); }

锁定WifiLock

1 2 3 public void acquireWifiLock() { mWifiLock.acquire(); }

释放WifiLock

1 2 3 4 5 public void releaseWifiLock() { if (mWifiLock.isHeld()) { mWifiLock.release(); } }

添加一个WiFi并连接

1 2 3 4 public void addNetworkAndConn(WifiConfiguration wcg) { int netId = mWifiManager.addNetwork(wcg); mWifiManager.enableNetwork(netId, true ); }

断开一个指定ID的WiFi

1 2 3 4 public void disconnectWifi(int netId) { mWifiManager.disableNetwork(netId); mWifiManager.disconnect(); }

连接到一个已经配置好了的WiFi

1 2 3 4 5 6 7 8 public void connectConfiguration(int index) { // 索引大于配置好的网络索引返回 if (index > mWifiConfiguration.size()) { return ; } mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true ); }

扫描可接入的WiFi

1 2 3 4 5 6 7 public void startScan() { mWifiManager.startScan(); // 得到扫描结果 List<ScanResult> wifiList = mWifiManager.getScanResults(); // 得到配置好的网络连接 List<WifiConfiguration> wifiConfigList = mWifiManager.getConfiguredNetworks(); }

查看扫描结果

1 2 3 4 5 6 7 8 9 10 11 12 public StringBuilder lookUpScan() { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < mWifiList.size(); i++) { stringBuilder .append( "Index_" + new Integer(i + 1).toString() + ":" ); // 将ScanResult信息转换成一个字符串包 // 其中把包括:BSSID、SSID、capabilities、frequency、level stringBuilder.append((mWifiList.get(i)).toString()); stringBuilder.append( "\n" ); } return stringBuilder; }

得到WiFi的一些信息

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 WifiInfo mifiInfo = mWifiManager.getConnectionInfo(); // 得到MAC地址 public String GetMacAddress() { return (mWifiInfo == null ) ? "NULL" : mWifiInfo.getMacAddress(); } // 得到接入点的BSSID public String GetBSSID() { return (mWifiInfo == null ) ? "NULL" : mWifiInfo.getBSSID(); } // 得到IP地址 public int GetIPAddress() { return (mWifiInfo == null ) ? 0 : mWifiInfo.getIpAddress(); } // 得到连接的ID public int GetNetworkId() { return (mWifiInfo == null ) ? 0 : mWifiInfo.getNetworkId(); } // 得到WifiInfo的所有信息包 public String GetWifiInfo() { return (mWifiInfo == null ) ? "NULL" : mWifiInfo.toString(); }

最后,使用WiFi必须添加的权限

1 2 3 4 5 6 <uses-permission android:name= "android.permission.ACCESS_WIFI_STATE" ></uses-permission> <uses-permission android:name= "android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission> <uses-permission android:name= "android.permission.WAKE_LOCK" ></uses-permission> <uses-permission android:name= "android.permission.INTERNET" ></uses-permission> <uses-permission android:name= "android.permission.CHANGE_WIFI_STATE" ></uses-permission> <uses-permission android:name= "android.permission.MODIFY_PHONE_STATE" ></uses-permission>

更多相关文章

  1. Android系统在新进程中启动自定义服务过程(startService)的原理分
  2. android 应用程序跳转到Settings的各个界面
  3. Android应用程序启动时发生AndroidRuntime : ClassNotFoundExcep
  4. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
  5. 防止android应用程序无响应ANR(Application Not Responding)
  6. Android Mediaplayer error (1, -2147483648) Error (-38,0)解决
  7. android studio 使用网络版本的gradle

随机推荐

  1. Android(安卓)Java调用.so和.a、Unity C#
  2. android中onKeyDown()事件的分析
  3. android TabLayout添加点击事件
  4. Android(安卓)Studio Cannot find local
  5. [Android]getevent,sendevent,input命令
  6. PC安卓模拟器 PANIC: Could not open: C:
  7. OPhone 2.0的2D动画实践(三)
  8. Test Android(安卓)with QTP
  9. OkHttp源码解析
  10. Android(安卓)ANR 分析学习总结(转)