Android WIFI开发

来源:互联网 发布:oracle和mysql区别 编辑:程序博客网 时间:2024/05/22 15:34

最近一段时间在开发一套MID产品上的自动化测试软件,开发过程中关于WIFI的问题最多,故而将WIFI所遇问题记录于此

WIFI连接过程大致为:

打开WIFI模块-------->开始扫描-------->扫描到需连接WIFI名将配置信息保存-------->开始进行连接--------->连接完成

对应的代码大致为:

setWifiEnabled(true)-------->startScan()-------->收到SCAN_RESULTS_AVAILABLE_ACTION消息开始扫描-------->将WifiConfiguration保存并addNetwork(configuration)添加

-------->扫描结束enableNetwork(res, true)开始尝试连接-------->收到NETWORK_STATE_CHANGED_ACTION消息判断此时WIFI是否已真正连接

-------->WIFI已连接-------->结束

在此过程当中有几点需特别注意

1.将WifiConfiguration保存

因为WIFI的配置信息变化很多,比如有密码和没密码,有密码的加密方式也各不一样,所以在你想连WIFI之前一定要确定路由的配置,这样才能做到有的放矢,笔者只用到了两种方式:(1)无密码(2)有密码且为WPA/WPA2加密方式,代码为

if (mKey == null) {//无密码
            configuration.allowedAuthAlgorithms.clear();
            configuration.allowedGroupCiphers.clear();
            configuration.allowedKeyManagement.clear();
            configuration.allowedPairwiseCiphers.clear();
            configuration.allowedProtocols.clear();
            configuration.SSID = "\"" + mSSID + "\"";
            configuration.wepKeys[0] = "";
            configuration.allowedKeyManagement
              .set(WifiConfiguration.KeyMgmt.NONE);
            configuration.wepTxKeyIndex = 0;
            res = mWifiManager.addNetwork(configuration);
            mWifiManager.saveConfiguration();

           } else {//有密码且为WPA/WPA2加密方式
            configuration.SSID = "\"" + mSSID + "\"";
            configuration.preSharedKey = "\"" + mKey + "\""; // 该热点的密码
            configuration.hiddenSSID = true;
            configuration.status = WifiConfiguration.Status.ENABLED;
            configuration.allowedAuthAlgorithms
              .set(WifiConfiguration.AuthAlgorithm.OPEN);
            configuration.allowedGroupCiphers
              .set(WifiConfiguration.GroupCipher.TKIP);
            configuration.allowedGroupCiphers
              .set(WifiConfiguration.GroupCipher.CCMP);
            configuration.allowedKeyManagement
              .set(WifiConfiguration.KeyMgmt.WPA_PSK);
            configuration.allowedPairwiseCiphers
              .set(WifiConfiguration.PairwiseCipher.TKIP);
            configuration.allowedPairwiseCiphers
              .set(WifiConfiguration.PairwiseCipher.CCMP);
            configuration.allowedProtocols
              .set(WifiConfiguration.Protocol.WPA);
            res = mWifiManager.addNetwork(configuration);
               mWifiManager.saveConfiguration();

           }

2.如何知道WIFI是否已连接上

(1)enableNetwork(res, true)的返回值只是这个函数是否执行成功,不代表是否已连上WIFI

(2)收到NETWORK_STATE_CHANGED_ACTION消息的情况有多种 未连接---------->已连接      未连接/已连接 ---------->WIFI关闭

所以在收到 NETWORK_STATE_CHANGED_ACTION之后需判断WIFI是否已真正连接上,判断方法为

public boolean isWifiConnect() {
  ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
  NetworkInfo ni = connManager.getActiveNetworkInfo();
  return (ni != null && ni.isConnectedOrConnecting());
 }

返回为true表示已连接,反之则未连接

3.很多之前已经连接上的WIFI,配置信息会自动保存,当你关闭---->打开WIFI时就会自动连接,但有时我们并不希望这样处理,

解决方法为在打开WIFI之前将以前所保存的信息清除,代码为

if(isWifiConnect()){
    WifiInfo info = mWifiManager.getConnectionInfo();
    mWifiManager.removeNetwork(info.getNetworkId());
    mWifiManager.saveConfiguration();
   }

 

 此外,WIFI的信号强度即所谓的DB值是评判一个路由性能的标准,但很多人可能不知道其实它与我们通常所看到的格数之间是有4格标准和5各标准之说,

5格标准就是通常在产品右下角转态栏所看到的,对应关系为:

信号格数

db

0

<=-89

1

 [-88-78]

2

[-77-67]

3

 [-66, -56]

4

>=-55

4格标准就是设置或WIFI分析仪里所看到的,对应关系为:

信号格数

db

1

<=-86

2

 [-85-71]

3

 [-70, -56]

4

>=-55

 

最后 笔者的软件在进入时将WIF打开,而在退出时会将WIFI关闭,若你的情况是之前已连接上,而想要在不重新关闭WIFI的情况下进行连接,

那么以上的方式并不适用

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小浪底地质灾害村庄到底怎么办? 地质灾害土地没法种怎么办 湿气重不出汗怎么办 收银中客人插队怎么办 遇到顾客不讲理怎么办 遇到无赖的顾客怎么办 开饭店遇到无赖怎么办 超市收银少钱怎么办 支付宝少收了钱怎么办 碰到找事的顾客怎么办 计泡器里的水减少怎么办 打篮球脖子闪了怎么办 打篮球扭到脖子怎么办 野生老虎老了怎么办 无能力还信用卡怎么办 人过世了信用卡怎么办 信用卡多还了怎么办 银行贷款卡丢了怎么办 信用卡重复还款了怎么办 工资银行卡掉了怎么办 个人贷款卡挂失怎么办 按揭贷款不下来怎么办 没有结婚怎么办房贷 还贷卡损坏了怎么办 信用贷款还不起怎么办 钱误存入信用卡怎么办 省级官员调动家属怎么办 发现中暑人员该怎么办 中暑了怎么办大班教案 中暑了怎么办安全教案 中暑抽筋怎么办喝什么 怀孕初期中暑了怎么办 冬天也要中暑怎么办? 中暑引起的头疼怎么办 中暑头疼的厉害怎么办 中暑后一直头疼怎么办 孕妇冬天中暑了怎么办 中暑恶心想吐怎么办 中暑吐怎么办快速缓解 中暑了老是吐怎么办 中暑吐了两回怎么办