Android管理与操作Wifi简单实例源码

jerry Android 2016年03月10日 收藏

因为需要一直在弄网络的问题,今天看了一下Wifi的操作,经过整理,做出来了一个类,可能不全,但是个人感觉已经完全能够满足需要了,当然,里面的方法也有可能是错误的或者是不全的,这个类我没有进行完整的测试,只测试了其中的一些方法。

其实操作Wifi也是很简单的,主要使用以下几个对象或变量:

  1. private WifiManager wifiManager;// 声明管理对象OpenWifi
  2. private WifiInfo wifiInfo;// Wifi信息
  3. private List<ScanResult> scanResultList; // 扫描出来的网络连接列表
  4. private List<WifiConfiguration> wifiConfigList;// 网络配置列表
  5. private WifiLock wifiLock;// Wifi锁

其实这些不写成一个单独的类也是可以操作的,介理这里为了使用方便,写了一个统一的类对Wifi进行操作,通过这些方法,基本上可以得到所有操作的数据

下面把代码给大家,如果需要可以做为一个参考:

  1. package com.wifitest;import java.util.List;
  2. import android.content.Context;
  3. import android.net.wifi.ScanResult;
  4. import android.net.wifi.WifiConfiguration;
  5. import android.net.wifi.WifiInfo;
  6. import android.net.wifi.WifiManager;
  7. import android.net.wifi.WifiManager.WifiLock;public class WifiManageClass
  8. {
  9. private WifiManager wifiManager;// 声明管理对象
  10. private WifiInfo wifiInfo;// Wifi信息
  11. private List<ScanResult> scanResultList; // 扫描出来的网络连接列表
  12. private List<WifiConfiguration> wifiConfigList;// 网络配置列表
  13. private WifiLock wifiLock;// Wifi锁
  14. public WifiManageClass(Context context)
  15. {
  16. this.wifiManager = (WifiManager) context
  17. .getSystemService(Context.WIFI_SERVICE);// 获取Wifi服务
  18. // 得到Wifi信息
  19. this.wifiInfo = wifiManager.getConnectionInfo();// 得到连接信息
  20. }
  21. public boolean getWifiStatus()
  22. {
  23. return wifiManager.isWifiEnabled();
  24. } // 打开/关闭 wifi
  25. public boolean openWifi()
  26. { if (!wifiManager.isWifiEnabled())
  27. {
  28. return wifiManager.setWifiEnabled(true);
  29. } else {
  30. return false;
  31. }
  32. }
  33. public boolean closeWifi()
  34. {
  35. if (!wifiManager.isWifiEnabled())
  36. {
  37. return true;
  38. }
  39. else
  40. {
  41. return wifiManager.setWifiEnabled(false);
  42. }
  43. }
  44. // 锁定/解锁wifi
  45. // 其实锁定WiFI就是判断wifi是否建立成功,在这里使用的是held,握手的意思acquire 得到!
  46. public void lockWifi()
  47. {
  48. wifiLock.acquire();
  49. }
  50. public void unLockWifi()
  51. {
  52. if (!wifiLock.isHeld()) {
  53. wifiLock.release(); // 释放资源
  54. }
  55. }
  56. // 我本来是写在构造函数中了,但是考虑到不是每次都会使用Wifi锁,所以干脆自己建立一个方法!需要时调用,建立就OK
  57. public void createWifiLock()
  58. {
  59. wifiLock = wifiManager.createWifiLock("flyfly"); // 创建一个锁的标志
  60. } // 扫描网络
  61. public void startScan()
  62. {
  63. wifiManager.startScan();
  64. scanResultList = wifiManager.getScanResults(); // 扫描返回结果列表
  65. wifiConfigList = wifiManager.getConfiguredNetworks(); // 扫描配置列表
  66. }
  67. public List<ScanResult> getWifiList()
  68. {
  69. return scanResultList;
  70. }
  71. public List<WifiConfiguration> getWifiConfigList()
  72. {
  73. return wifiConfigList;
  74. }
  75. // 获取扫描列表
  76. public StringBuilder lookUpscan() {
  77. StringBuilder scanBuilder = new StringBuilder();
  78. for (int i = 0; i < scanResultList.size(); i++)
  79. {
  80. scanBuilder.append("编号:" + (i + 1));
  81. scanBuilder.append(scanResultList.get(i).toString());
  82. //所有信息
  83. scanBuilder.append("\n");
  84. }
  85. return scanBuilder;
  86. } //获取指定信号的强度
  87. public int getLevel(int NetId)
  88. {
  89. return scanResultList.get(NetId).level;
  90. } // 获取本机Mac地址
  91. public String getMac() {
  92. return (wifiInfo == null) ? "" : wifiInfo.getMacAddress();
  93. }
  94. public String getBSSID()
  95. {
  96. return (wifiInfo == null) ? null : wifiInfo.getBSSID();
  97. }
  98. public String getSSID()
  99. {
  100. return (wifiInfo == null) ? null : wifiInfo.getSSID();
  101. }
  102. // 返回当前连接的网络的ID
  103. public int getCurrentNetId()
  104. {
  105. return (wifiInfo == null) ? null : wifiInfo.getNetworkId();
  106. } // 返回所有信息
  107. public String getwifiInfo()
  108. {
  109. return (wifiInfo == null) ? null : wifiInfo.toString();
  110. } // 获取IP地址
  111. public int getIP() {
  112. return (wifiInfo == null) ? null : wifiInfo.getIpAddress();
  113. } // 添加一个连接
  114. public boolean addNetWordLink(WifiConfiguration config) {
  115. int NetId = wifiManager.addNetwork(config);
  116. return wifiManager.enableNetwork(NetId, true);
  117. } // 禁用一个链接 public boolean disableNetWordLick(int NetId) {
  118. wifiManager.disableNetwork(NetId);
  119. return wifiManager.disconnect();
  120. } // 移除一个链接
  121. public boolean removeNetworkLink(int NetId)
  122. {
  123. return wifiManager.removeNetwork(NetId);
  124. } //不显示SSID public void hiddenSSID(int NetId)
  125. {
  126. wifiConfigList.get(NetId).hiddenSSID=true;
  127. } //显示SSID public void displaySSID(int NetId)
  128. {
  129. wifiConfigList.get(NetId).hiddenSSID=false;
  130. }
  131. }

当然在操作Wifi的时候也需要相应的权限,个人感觉这个是使用权限最多的,当然操作Wifi不能在模拟器中进行,必须要放到带有Wifi的真机上进行,还有此类没有对可能存在的错误进行相应的捕获与处理,希望参考的朋友注意这一点,否则可能容易被突然出来的错误误导,也找不到问题,我在开发的时候就遇到过这样的问题!因此对可能存在的问题,一定要进行相应的处理!

下面是操作这些所需要的权限,当然根据操作的内容不同,可能权限也不同,下面的权限仅供参考:

  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><uses-permission android:name="adnroid.permission.ACCESS_CHECKIN_PROPERTTES"></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="adnroid.permission.CHANGE_WIFI_STATE"></uses-permission><uses-permission android:name="android.permission.MODIFY_PHONE_STATE"></uses-permission>

关于Android管理与操作Wifi简单实例源码就给大家介绍到这里,如果你发现这些代码中有错误或者是不完整的话,希望发消息给我,进行完善!只有相互交流才能进步!