当前位置:  操作系统>andriod

Android及andriod无线网络Wifi开发的几点注意事项

 
分享到:
    发布时间:2014-1-12  


    本文导语:  在android开发时需要注意以下的细节问题:1.在调用很多组件的setText()方法时,如果设置的值为数字,不能直接将数字传入,需要将数字转换为String才能得到 正确的结果。2.在调用setColor时,如果传入的是一个resid需要调用getR...

 在android开发时需要注意以下的细节问题:

1.在调用很多组件的setText()方法时,如果设置的值为数字,不能直接将数字传入,需要将数字转换为String才能得到 正确的结果。

2.在调用setColor时,如果传入的是一个resid需要调用getResource().getColor(int resId),获取正确的颜色值,才能得到正确的结果。

3.在View被添加到父组件时,调用View的getHeight方法和getWidth获取的结果都未0,只有当组件被画出来以后   ,调用这两个方法才能获得正确的结果。有2个方法可以获取组件的实际尺寸:

当此组件有事件触发的时候,因为只有组件被画出来了,才能接受事件。比如在点击或触摸,长按等事件触发时调用该组件的这两个方法,就可以获取正确的结果。

在这个组件的onDraw方法里面调用这两个方法,也可以获取正确的结果。

4.在代码中设置View的Width和Height属性,不能通过setWidth或setHeight方法进行设置,需要调用getLayoutParams().进行设置,例如:

        view.getLayoutParams().width=100;

        view.getLayoutParams().height=100;

 andriod无线网络Wifi开发的几点注意事项:

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中,同时WifiManager会为我们维护一个List,这个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
en = NetworkInterface    
                  .getNetworkInterfaces(); en.hasMoreElements();) {    
              NetworkInterface intf = en.nextElement();    
              for (Enumeration
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);
}




  • 本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.169IT.COM)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:Android及andriod无线网络Wifi开发的几点注意事项
相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号