最近,由于作业要求要做一个android应用。其中一个功能模块是通过程序来实现wifi的自动连接。之前没有接触过android,但是以前用过java(菜鸟级)……呵呵,扯远了。

这两天对android的wifi功能研究了一下。下面共享出自己封装的WifiConnect类。(这里参考了ZXing开源项目中wifi模块)

首先,要了解android关于wifi的API.

如果你喜欢看English API,这是android关于wifi的API地址:

http://developer.android.com/reference/android/net/wifi/package-summary.html(配置Wifi,还需要设定权限,android中关于wifi的API文档中说明了要添加什么权限)

如果你一看英语就头疼,这里有关于wifi的api的中文解释

http://note.sdo.com/u/1500295617/n/prb71~jGAHfpnM0l000bgN

切入正题,这里贴出一个封装了的类(WifiConnect),在实例化WifiConnect对象时,需要传入一个WifiManager对象。WifiConnect类向外部提供一个Connect方法,参数是无线的SSID,password,还有加密类型。

[java] view plain copy
  1. /*
  2. *WifiConnect.java
  3. *Author:cscmaker
  4. */
  5. packagecom.wifi.connect;
  6. importjava.util.List;
  7. importandroid.net.wifi.WifiConfiguration;
  8. importandroid.net.wifi.WifiManager;
  9. importandroid.util.Log;
  10. publicclassWifiConnect{
  11. WifiManagerwifiManager;
  12. //定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况
  13. publicenumWifiCipherType
  14. {
  15. WIFICIPHER_WEP,WIFICIPHER_WPA,WIFICIPHER_NOPASS,WIFICIPHER_INVALID
  16. }
  17. //构造函数
  18. publicWifiConnect(WifiManagerwifiManager)
  19. {
  20. this.wifiManager=wifiManager;
  21. }
  22. //打开wifi功能
  23. privatebooleanOpenWifi()
  24. {
  25. booleanbRet=true;
  26. if(!wifiManager.isWifiEnabled())
  27. {
  28. bRet=wifiManager.setWifiEnabled(true);
  29. }
  30. returnbRet;
  31. }
  32. //提供一个外部接口,传入要连接的无线网
  33. publicbooleanConnect(StringSSID,StringPassword,WifiCipherTypeType)
  34. {
  35. if(!this.OpenWifi())
  36. {
  37. returnfalse;
  38. }
  39. //开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
  40. //状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
  41. while(wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLING)
  42. {
  43. try{
  44. //为了避免程序一直while循环,让它睡个100毫秒在检测……
  45. Thread.currentThread();
  46. Thread.sleep(100);
  47. }
  48. catch(InterruptedExceptionie){
  49. }
  50. }
  51. WifiConfigurationwifiConfig=this.CreateWifiInfo(SSID,Password,Type);
  52. //
  53. if(wifiConfig==null)
  54. {
  55. returnfalse;
  56. }
  57. WifiConfigurationtempConfig=this.IsExsits(SSID);
  58. if(tempConfig!=null)
  59. {
  60. wifiManager.removeNetwork(tempConfig.networkId);
  61. }
  62. intnetID=wifiManager.addNetwork(wifiConfig);
  63. booleanbRet=wifiManager.enableNetwork(netID,false);
  64. returnbRet;
  65. }
  66. //查看以前是否也配置过这个网络
  67. privateWifiConfigurationIsExsits(StringSSID)
  68. {
  69. List<WifiConfiguration>existingConfigs=wifiManager.getConfiguredNetworks();
  70. for(WifiConfigurationexistingConfig:existingConfigs)
  71. {
  72. if(existingConfig.SSID.equals("\""+SSID+"\""))
  73. {
  74. returnexistingConfig;
  75. }
  76. }
  77. returnnull;
  78. }
  79. privateWifiConfigurationCreateWifiInfo(StringSSID,StringPassword,WifiCipherTypeType)
  80. {
  81. WifiConfigurationconfig=newWifiConfiguration();
  82. config.allowedAuthAlgorithms.clear();
  83. config.allowedGroupCiphers.clear();
  84. config.allowedKeyManagement.clear();
  85. config.allowedPairwiseCiphers.clear();
  86. config.allowedProtocols.clear();
  87. config.SSID="\""+SSID+"\"";
  88. if(Type==WifiCipherType.WIFICIPHER_NOPASS)
  89. {
  90. config.wepKeys[0]="";
  91. config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
  92. config.wepTxKeyIndex=0;
  93. }
  94. if(Type==WifiCipherType.WIFICIPHER_WEP)
  95. {
  96. config.preSharedKey="\""+Password+"\"";
  97. config.hiddenSSID=true;
  98. config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
  99. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
  100. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
  101. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
  102. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
  103. config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
  104. config.wepTxKeyIndex=0;
  105. }
  106. if(Type==WifiCipherType.WIFICIPHER_WPA)
  107. {
  108. config.preSharedKey="\""+Password+"\"";
  109. config.hiddenSSID=true;
  110. config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
  111. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
  112. config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
  113. config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
  114. config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
  115. config.status=WifiConfiguration.Status.ENABLED;
  116. }
  117. else
  118. {
  119. returnnull;
  120. }
  121. returnconfig;
  122. }
  123. }

更多相关文章

  1. Android(安卓)7.0 Nougat不得不知的11项新功能
  2. 移植 android, touch screen 不能正常工作的问题
  3. Android学习心得之二——Android系统架构图及简单的系统架构介绍
  4. 新浪微博开放平台开发-android客户端(2)
  5. 在Android应用中集成YouTube视频播放功能
  6. Android(安卓)实现记住用户名和密码的功能
  7. android中轮播图的实现
  8. android 获取汉字拼音
  9. Android需要大量内存时自己设置堆大小

随机推荐

  1. Android通过GPS或NetWork获取当前位置信
  2. Android(安卓)RecyclerView+StaggeredGrid
  3. android 实现全屏代码
  4. android学习-组件中的layout-weight属性
  5. android小项目打地鼠(五)
  6. 【Android】桌面歌词悬浮效果简单实现
  7. Android-动态注册广播和注销广播
  8. Android_API_临时翻译
  9. 精品网站集合
  10. android - JNI接口函数 (1)