设为首页 收藏本站
查看: 990|回复: 0

[经验分享] WIFI连接

[复制链接]

尚未签到

发表于 2015-10-1 07:42:24 | 显示全部楼层 |阅读模式
1 首先,要实现一个简单的WIFI连接设置,我们需要掌握和WIFI功能相关的一些类,比如WIfiManager,WifiInfo,ScanResult,WifiConfiguration等,提供了WIFI连接相关的基本的API.
  
比如:
  
打开关闭网关:wifiManager.setWifiEnabled(true/false);
  
扫描周边网络:wifiManager.getScanResults();
  
连接指定网络:wifiManager.enableNetwork(networkId,true);
  
添加网络:wifiManager.addNetwork(wcg);
  
移除网络:wifiManager.removeNetwork(netId);
  
获取网卡状态:wifiManager.getWifiState()
  
……
  
2 扫描的网络将会被保存在一个List<ScanResult>中,同时WifiManager会为我们维护一个List<WifiConfiguration>,这个List中保存了我们已经连接过的配置好的网络连接.
  
当我们选择一个网络时,判断它是否存在于这个List中,存在即可直接连接,否则需要用户输入密码创建一个新的WifiConfiguration.
  
3 获得的ScanResult中将会保存有该无线连接的相关信息,包括SSID,BSSID,capabilities,level等属性,其中SSID号是该连接的一个标识符,比如我们经常看到的TP_LINKXXX.
  
capabilities中保存了相关加密信息,比如WEB和WPA等.level则表示信号度.
  
4 在获取连接状态时,即调用wifiManager.getWifiState()或者wifiInfo.getSupplicantState()时,通 常在用户已经授权成功后,我们获得的状态值就为COMPLETED,此时不管网络是否已经连接成功,我们都无法获得新的状态. 所以要判断WIFI网络是否已经真的连接成功需要用到如下方法判断:
  ConnectivityManager connManager = (ConnectivityManager) WifiConnection.this
              .getSystemService(CONNECTIVITY_SERVICE);
// 获取代表联网状态的NetWorkInfo对象
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
  
if(networkInfo != null && networkInfo.getType() == 1
&& wifiAdmin.getWifiInfo().getSSID()!=null)
{
  

//WIFI网络连接成功
  
}
  
5 获取本地IP地址的方法:
  
public String getLocalIpAddress() {     
        try {     
            for (Enumeration<NetworkInterface> en = NetworkInterface     
                    .getNetworkInterfaces(); en.hasMoreElements();) {     
                NetworkInterface intf = en.nextElement();     
                for (Enumeration<InetAddress> enumIpAddr = intf     
                        .getInetAddresses(); enumIpAddr.hasMoreElements();) {     
                    InetAddress inetAddress = enumIpAddr.nextElement();     
                    if (!inetAddress.isLoopbackAddress()) {     
                        return inetAddress.getHostAddress().toString();     
                    }     
                }     
            }     
        } catch (SocketException ex) {     
            Log.e("WifiPreference IpAddress", ex.toString());     
        }     
        return null;     
    }     
  

6 在创建一个新的WifiConfiguration时,切记SSID和preSharedKey必须添加双引号,否则必将会导致连接失败.正确写法如下:
//创建一个新的WifiConfiguration
WifiConfiguration wcg = new WifiConfiguration();
wcg.BSSID = mBSSID;
//SSID和preSharedKey必须添加双引号,否则将会导致连接失败
wcg.SSID = """ + mSSID + """;

wcg.hiddenSSID = false;
wcg.status = WifiConfiguration.Status.ENABLED;
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
//如果加密模式为WEP
if(mSecurity.equals("WEP"))
{
    wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
    wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
    wcg.wepKeys[0] =""" + editText.getText().toString() + """; //This is the WEP Password
    wcg.wepTxKeyIndex = 0;
}
//如果加密模式为WPA EPA
else if(mSecurity.equals("WPA EAP"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = """ + editText.getText().toString() + """;
}
//如果加密模式为WPA PSK
else if(mSecurity.equals("WPA PSK"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = """ + editText.getText().toString() + """;
}
//无加密
else
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121091-1-1.html 上篇帖子: ios 获取当前wifi名称 下篇帖子: 用电脑WiFi热点,手机连接上网(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表