摘要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 软键盘 返回键 消失事件 监听
  2. android 之SQLite数据库 增、删、改、查
  3. Android仿今日头条首页的顶部标签栏和底
  4. Android SystemProperties 系统属性分析
  5. android 设置横屏竖屏
  6. Android Jetpack Compose总结
  7. Button或者ImageButton的背景设为透明或
  8. Android(安卓)核心分析 -----IPC框架分析
  9. 安装 Android 1.6 SDK
  10. activity以dialog形式显示