Android wifi开发

来源:互联网 发布:手机淘宝卖家开通花呗 编辑:程序博客网 时间:2024/05/22 11:46

http://blog.csdn.net/einarzhang/article/details/6963192

这里给出一篇基本的wifi开发流程,希望对涉及到利用wifi进行网络传输的应用有一定帮助

1 AndroidManifest.xml中配置

[html] view plaincopy
  1. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >  
  2. </uses-permission>  
  3. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >  
  4. </uses-permission>  
  5. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >  
  6. </uses-permission>  
  7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >  
  8. </uses-permission>  
  9. <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" >  
  10. </uses-permission>  
  11. <uses-permission android:name="android.permission.INTERNET" >  
  12. </uses-permission>  

2 获取wifi服务,并开启wifi

[java] view plaincopy
  1. if (wifiManager == null)  
  2.     wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
  3. if (!wifiManager.isWifiEnabled()) {  
  4.     wifiManager.setWifiEnabled(true);  
  5. }  

3 注册wifi扫描监听器,并开始扫描

[java] view plaincopy
  1. wifiNames = new ArrayList<String>();  
  2. wifiDevices = new ArrayList<WifiConfiguration>();  
  3. registerReceiver(wifiReceiver, new IntentFilter(  
  4.         WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));  
  5. wifiManager.startScan();  

4 wifi扫描监听器

[java] view plaincopy
  1. private final BroadcastReceiver wifiReceiver = new BroadcastReceiver() {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         List<WifiConfiguration> wcList = wifiManager  
  5.                     .getConfiguredNetworks();  
  6.         WifiConfiguration wc = null;  
  7.         wifiNames.clear();  
  8.         wifiDevices.clear();  
  9.         for (int i = 0, len = wcList.size(); i < len; i++) {  
  10.             wc = wcList.get(i);  
  11.             if (!wifiNames.contains(wc.SSID)) {  
  12.                 wifiNames.add(wc.SSID);  
  13.                 wifiDevices.add(wc);  
  14.             }  
  15.         }  
  16.     };  

5 获取到周围wifi列表后,让手机连上该wifi。(对wifi的连接我没有做具体的测试,希望对这段代码有问题的朋友可以给出评论)

[java] view plaincopy
  1. WifiConfiguration wc = wifiDevices.get(index);  
  2. int resId = wifiManager.addNetwork(wc);  
  3. boolean isSucc = wifiManager.enableNetwork(resId, true);  
  4. isSucc = wifiManager.reassociate();  

6 获取本机的IP地址,通过网上提供的一个方法获取,不过似乎不是十分的准确

[java] view plaincopy
  1. public String getLocalIpAddress() {  
  2.         try {  
  3.             for (Enumeration<NetworkInterface> en = NetworkInterface  
  4.                     .getNetworkInterfaces(); en.hasMoreElements();) {  
  5.                 NetworkInterface intf = en.nextElement();  
  6.                 for (Enumeration<InetAddress> enumIpAddr = intf  
  7.                         .getInetAddresses(); enumIpAddr.hasMoreElements();) {  
  8.                     InetAddress inetAddress = enumIpAddr.nextElement();  
  9.                     if (!inetAddress.isLoopbackAddress()) {  
  10.                         return inetAddress.getHostAddress().toString();  
  11.                     }  
  12.                 }  
  13.             }  
  14.         } catch (SocketException ex) {  
  15.             Log.e(TAG, ex.toString());  
  16.         }  
  17.         return null;  
  18.     }  

7 连接到wifi后,通过本机IP地址便可以进行相关网络开发