lihu129c 发表于 2015-10-1 12:32:45

Android Wifi模块分析及主要方法

转载自 maguowei2723
最终编辑 glaiveLee
这两天通过对Android源码中Wifi模块相关代码的理解,对Wifi模块有了一个全新的认识。简单记录在这里,就算是为以后的学习留个记录。
   总览:
   1,Wifi介绍(百度百科)
   2,Android中Wifi模块的初始化
   3,Wifi模块的启动(使能)
   4,Wifi扫描流程

   6,Wifi启动连接流程
   7,Wifi配置IP地址
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先需要强调一点的是wifi只能在真机上测试!
在Android里,所有的wifi操作都在android.net.wifi包里,而常用的类也就只用几个,对于一般的开发人员来说,常用的操作也是有限的,不需要刻意的去记,用的时候现查就ok了,下面是《Android应用开发揭秘》里面关于wifi的范例。
-----------------------------------------------------------

[*]package com.yarin.android.Examples_08_08;
[*]
[*]import java.util.List;
[*]
[*]import android.content.Context;
[*]
[*]import android.net.wifi.ScanResult;
[*]
[*]import android.net.wifi.WifiConfiguration;
[*]
[*]import android.net.wifi.WifiInfo;
[*]
[*]import android.net.wifi.WifiManager;
[*]
[*]import android.net.wifi.WifiManager.WifiLock;
[*]
[*]public class WifiAdmin
[*]
[*]{
[*]
[*]    //定义WifiManager对象
[*]
[*]    private WifiManager mWifiManager;
[*]
[*]    //定义WifiInfo对象
[*]
[*]    private WifiInfo mWifiInfo;
[*]
[*]    //扫描出的网络连接列表
[*]
[*]    private List<ScanResult> mWifiList;
[*]
[*]    //网络连接列表
[*]
[*]    private List<WifiConfiguration> mWifiConfiguration;
[*]
[*]    //定义一个WifiLock
[*]
[*]    WifiLock mWifiLock;
[*]
[*]    //构造器
[*]
[*]    public WifiAdmin(Context context)
[*]
[*]    {
[*]
[*]      //取得WifiManager对象
[*]
[*]      mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
[*]
[*]      //取得WifiInfo对象
[*]
[*]      mWifiInfo = mWifiManager.getConnectionInfo();
[*]
[*]    }
[*]
[*]    //打开WIFI
[*]
[*]    public void OpenWifi()
[*]
[*]    {
[*]
[*]      if (!mWifiManager.isWifiEnabled())
[*]
[*]      {
[*]
[*]            mWifiManager.setWifiEnabled(true);
[*]
[*]
[*]
[*]      }
[*]
[*]    }
[*]
[*]    //关闭WIFI
[*]
[*]    public void CloseWifi()
[*]
[*]    {
[*]
[*]      if (!mWifiManager.isWifiEnabled())
[*]
[*]      {
[*]
[*]            mWifiManager.setWifiEnabled(false);
[*]
[*]      }
[*]
[*]    }
[*]
[*]    //锁定WifiLock
[*]
[*]    public void AcquireWifiLock()
[*]
[*]    {
[*]
[*]      mWifiLock.acquire();
[*]
[*]    }
[*]
[*]    //解锁WifiLock
[*]
[*]    public void ReleaseWifiLock()
[*]
[*]    {
[*]
[*]      //判断时候锁定
[*]
[*]      if (mWifiLock.isHeld())
[*]
[*]      {
[*]
[*]            mWifiLock.acquire();
[*]
[*]      }
[*]
[*]    }
[*]
[*]    //创建一个WifiLock
[*]
[*]    public void CreatWifiLock()
[*]
[*]    {
[*]
[*]      mWifiLock = mWifiManager.createWifiLock("Test");
[*]
[*]    }
[*]
[*]    //得到配置好的网络
[*]
[*]    public List<WifiConfiguration> GetConfiguration()
[*]
[*]    {
[*]
[*]      return mWifiConfiguration;
[*]
[*]    }
[*]
[*]    //指定配置好的网络进行连接
[*]
[*]    public void ConnectConfiguration(int index)
[*]
[*]    {
[*]
[*]      //索引大于配置好的网络索引返回
[*]
[*]      if(index > mWifiConfiguration.size())
[*]
[*]      {
[*]
[*]            return;
[*]
[*]      }
[*]
[*]      //连接配置好的指定ID的网络
[*]
[*]      mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true);
[*]
[*]    }
[*]
[*]    public void StartScan()
[*]
[*]    {
[*]
[*]      mWifiManager.startScan();
[*]
[*]      //得到扫描结果
[*]
[*]      mWifiList = mWifiManager.getScanResults();
[*]
[*]      //得到配置好的网络连接
[*]
[*]      mWifiConfiguration = mWifiManager.getConfiguredNetworks();
[*]
[*]    }
[*]
[*]    //得到网络列表
[*]
[*]    public List<ScanResult> GetWifiList()
[*]
[*]    {
[*]
[*]      return mWifiList;
[*]
[*]    }
[*]
[*]    //查看扫描结果
[*]
[*]    public StringBuilder LookUpScan()
[*]
[*]    {
[*]
[*]      StringBuilder stringBuilder = new StringBuilder();
[*]
[*]      for (int i = 0; i < mWifiList.size(); i++)
[*]
[*]      {
[*]
[*]            stringBuilder.append("Index_"+new Integer(i + 1).toString() + ":");
[*]
[*]            //将ScanResult信息转换成一个字符串包
[*]
[*]            //其中把包括:BSSID、SSID、capabilities、frequency、level
[*]
[*]            stringBuilder.append((mWifiList.get(i)).toString());
[*]
[*]            stringBuilder.append("\n");
[*]
[*]      }
[*]
[*]      return stringBuilder;
[*]
[*]    }
[*]
[*]    //得到MAC地址
[*]
[*]    public String GetMacAddress()
[*]
[*]    {
[*]
[*]      return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
[*]
[*]    }
[*]
[*]    //得到接入点的BSSID
[*]
[*]    public String GetBSSID()
[*]
[*]    {
[*]
[*]      return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
[*]
[*]    }
[*]
[*]    //得到IP地址
[*]
[*]    public int GetIPAddress()
[*]
[*]    {
[*]
[*]      return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
[*]
[*]    }
[*]
[*]    //得到连接的ID
[*]
[*]    public int GetNetworkId()
[*]
[*]    {
[*]
[*]      return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
[*]
[*]    }
[*]
[*]    //得到WifiInfo的所有信息包
[*]
[*]    public String GetWifiInfo()
[*]
[*]    {
[*]
[*]      return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
[*]
[*]    }
[*]
[*]    //添加一个网络并连接
[*]
[*]    public void AddNetwork(WifiConfiguration wcg)
[*]
[*]    {
[*]
[*]      int wcgID = mWifiManager.addNetwork(wcg);
[*]
[*]      mWifiManager.enableNetwork(wcgID, true);
[*]
[*]    }
[*]
[*]    //断开指定ID的网络
[*]
[*]    public void DisconnectWifi(int netId)
[*]
[*]    {
[*]
[*]      mWifiManager.disableNetwork(netId);
[*]
[*]      mWifiManager.disconnect();
[*]
[*]    }
[*]
[*]}
页: [1]
查看完整版本: Android Wifi模块分析及主要方法