android wifi操作大全

包含:wifi连接,wifi加密情况,wifi配置,wifi扫描,wifi连接速度,wifi的详细Info,wifi的强度等

import java.net.Inet4Address;
import java.util.Comparator;
import java.util.List;

import com.bmsh.routermaster.constant.Constant;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
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;
import android.telephony.TelephonyManager;
import android.util.Log;

/**
* Class Name: WifiAdmin.java<br>
* Function:Wifi连接管理工具类<br>
*/
public class WifiAdmin implements Comparator<ScanResult> {
     // 定义一个WifiManager对象
     private WifiManager mWifiManager;
     // 定义一个WifiInfo对象
     private WifiInfo mWifiInfo;
     // 扫描出的网络连接列表
     private List<ScanResult> mWifiList;
     // 网络连接列表
     private List<WifiConfiguration> mWifiConfigurations;
     private WifiLock mWifiLock;
     private Context mContext;

     // 定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况
     public enum WifiCipherType {
          WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID
     }

     public WifiAdmin(Context context) {
          // 取得WifiManager对象
          this.mContext = context;
          mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
          // 取得WifiInfo对象
          mWifiInfo = mWifiManager.getConnectionInfo();

     }

     /**
     * Function:关闭wifi<br>
     * www.javaapk.com更改
     *
     * @author ZYT DateTime 2014-5-15 上午12:17:37<br>
     * @return<br>
     */
     public boolean closeWifi() {
          if (mWifiManager.isWifiEnabled()) {
               return mWifiManager.setWifiEnabled(false);
          }
          return false;
     }

     /**
     * Gets the Wi-Fi enabled state.检查当前wifi状态
     *
     * @return One of {@link WifiManager#WIFI_STATE_DISABLED},
     *         {@link WifiManager#WIFI_STATE_DISABLING},
     *         {@link WifiManager#WIFI_STATE_ENABLED},
     *         {@link WifiManager#WIFI_STATE_ENABLING},
     *         {@link WifiManager#WIFI_STATE_UNKNOWN}
     * @see #isWifiEnabled()
     */
     public int checkState() {
          return mWifiManager.getWifiState();
     }

     // 锁定wifiLock
     public void acquireWifiLock() {
          mWifiLock.acquire();
     }

     // 解锁wifiLock
     public void releaseWifiLock() {
          // 判断是否锁定
          if (mWifiLock.isHeld()) {
               mWifiLock.acquire();
          }
     }

     // 创建一个wifiLock
     public void createWifiLock() {
          mWifiLock = mWifiManager.createWifiLock("test");
     }

     // 得到配置好的网络
     public List<WifiConfiguration> getConfiguration() {
          return mWifiConfigurations;
     }

     // 指定配置好的网络进行连接
     public void connetionConfiguration(int index) {
          if (index > mWifiConfigurations.size()) {
               return;
          }
          // 连接配置好指定ID的网络
          mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);
     }

     public void startScan() {
          // openWifi();
          mWifiManager.startScan();
          // 得到扫描结果
          mWifiList = mWifiManager.getScanResults();
          // 得到配置好的网络连接
          mWifiConfigurations = mWifiManager.getConfiguredNetworks();
     }

     // 得到网络列表
     public List<ScanResult> getWifiList() {
          return mWifiList;
     }

     // 查看扫描结果
     public StringBuffer lookUpScan() {
          StringBuffer sb = new StringBuffer();
          for (int i = 0; i < mWifiList.size(); i++) {
               sb.append("Index_" + new Integer(i + 1).toString() + ":");
               // 将ScanResult信息转换成一个字符串包
               // 其中把包括:BSSID、SSID、capabilities、frequency、level
               sb.append((mWifiList.get(i)).toString()).append("\n");
          }
          return sb;
     }

     public String getMacAddress() {
          return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
     }

     /**
     * Return the basic service set identifier (BSSID) of the current access
     * point. The BSSID may be {@code null} if there is no network currently
     * connected.
     *
     * @return the BSSID, in the form of a six-byte MAC address:
     *         {@code XX:XX:XX:XX:XX:XX}
     */
     public String getBSSID() {
          return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
     }

     public int getIpAddress() {
          return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
     }

     /**
     * 获取wifi SSID
     *
     * @return
     */
     public String getSSID() {
          return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID();
     }

     /**
     * 获取连接速度
     *
     * @return
     */
     public int getLinkSpeed() {
          return (mWifiInfo == null) ? 0 : mWifiInfo.getLinkSpeed();
     }

     /**
     * 获取RSSI
     *
     * @return
     */
     public int getRssi() {
          return (mWifiInfo == null) ? 0 : mWifiInfo.getRssi();
     }

     /**
     * Each configured network has a unique small integer ID, used to identify
     * the network when performing operations on the supplicant. This method
     * returns the ID for the currently connected network.
     *
     * @return the network ID, or -1 if there is no currently connected network
     */
     public int getNetWordId() {
          return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
     }

     /**
     * Function: 得到wifiInfo的所有信息<br>
     *
     * @author ZYT DateTime 2014-5-14 上午11:03:32<br>
     * @return<br>
     */
     public String getWifiInfo() {
          return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
     }

     // 添加一个网络并连接
     public void addNetWork(WifiConfiguration configuration) {
          int wcgId = mWifiManager.addNetwork(configuration);
          mWifiManager.enableNetwork(wcgId, true);
     }

     // 断开指定ID的网络
     public void disConnectionWifi(int netId) {
          mWifiManager.disableNetwork(netId);
          mWifiManager.disconnect();
     }

     /**
     * Function: 打开wifi功能<br>
     *
     * @author ZYT DateTime 2014-5-14 上午11:01:11<br>
     * @return true:打开成功;false:打开失败<br>
     */
     public boolean openWifi() {
          boolean bRet = true;
          if (!mWifiManager.isWifiEnabled()) {
               bRet = mWifiManager.setWifiEnabled(true);
          }
          return bRet;
     }

     /**
     * Function: 提供一个外部接口,传入要连接的无线网 <br>
     *
     * @param SSID
     *            SSID
     * @param Password
     * @param Type
     *            <br>
     *            没密码:{@linkplain WifiCipherType#WIFICIPHER_NOPASS}<br>
     *            WEP加密: {@linkplain WifiCipherType#WIFICIPHER_WEP}<br>
     *            WPA加密: {@linkplain WifiCipherType#WIFICIPHER_WPA}
     * @return true:连接成功;false:连接失败<br>
     */
     @SuppressWarnings("unused")
     public boolean connect(String SSID, String Password, WifiCipherType Type) {
          Log.i("开始联网", "开始联网");
          if (!this.openWifi()) {
               return false;
          }
          // 开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
          // 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
          while (mWifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) {
               try {
                    // 为了避免程序一直while循环,让它睡个100毫秒在检测……
                    Thread.currentThread();
                    Thread.sleep(100);
               } catch (InterruptedException ie) {
               }
          }
          Log.i(Constant.LOG_NAME, "wifi正在连接,请稍候。。。。。。");
          WifiConfiguration wifiConfig = createWifiInfo(SSID, Password, Type);
          if (wifiConfig == null) {
               return false;
          }
          WifiConfiguration tempConfig = this.isExsits(SSID);
          int tempId = wifiConfig.networkId;
          if (tempConfig != null) {
               tempId = tempConfig.networkId;
               mWifiManager.removeNetwork(tempConfig.networkId);
          }
          int netID = mWifiManager.addNetwork(wifiConfig);
          // 断开连接
          mWifiManager.disconnect();
          // 重新连接
          netID = wifiConfig.networkId;
          // 设置为true,使其他的连接断开
          boolean bRet = mWifiManager.enableNetwork(netID, true);
          mWifiManager.reconnect();
          Log.i("网络连接结束", "网络连接结束" + "\r\n" + bRet);
          return bRet;
     }

     // 查看以前是否也配置过这个网络
     private WifiConfiguration isExsits(String SSID) {
          List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();
          for (WifiConfiguration existingConfig : existingConfigs) {
               if (existingConfig.SSID.equals("\"" + SSID + "\"")) {
                    return existingConfig;
               }
          }
          return null;
     }

     private WifiConfiguration createWifiInfo(String SSID, String Password, WifiCipherType Type) {
          Log.i("创建网络连接开始", "开始创建网络连接");
          WifiConfiguration config = new WifiConfiguration();
          config.allowedAuthAlgorithms.clear();
          config.allowedGroupCiphers.clear();
          config.allowedKeyManagement.clear();
          config.allowedPairwiseCiphers.clear();
          config.allowedProtocols.clear();
          config.SSID = "\"" + SSID + "\"";
          if (Type == WifiCipherType.WIFICIPHER_NOPASS) {
               config.wepKeys[0] = "";
               config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
               config.wepTxKeyIndex = 0;
          }
          if (Type == WifiCipherType.WIFICIPHER_WEP) {
               config.preSharedKey = "\"" + Password + "\"";
               config.hiddenSSID = true;
               config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
               config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
               config.wepTxKeyIndex = 0;
          }
          if (Type == WifiCipherType.WIFICIPHER_WPA) {
               // 修改之后配置
               config.preSharedKey = "\"" + Password + "\"";
               config.hiddenSSID = true;
               config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
               config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
               config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
               // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
               config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

          } else {
               return null;
          }
          Log.i("网络以创建", "网络已经创建");
          return config;
     }

     /**
     * Function:判断扫描结果是否连接上<br>
     *
     * @author ZYT DateTime 2014-5-14 上午11:31:40<br>
     * @param result
     * @return<br>
     */
     public boolean isConnect(ScanResult result) {
          if (result == null) {
               return false;
          }

          mWifiInfo = mWifiManager.getConnectionInfo();
          String g2 = "\"" + result.SSID + "\"";
          if (mWifiInfo.getSSID() != null && mWifiInfo.getSSID().endsWith(g2)) {
               return true;
          }
          return false;
     }

     /**
     * Function: 将int类型的IP转换成字符串形式的IP<br>
     *
     * @author ZYT DateTime 2014-5-14 下午12:28:16<br>
     * @param ip
     * @return<br>
     */
     public String ipIntToString(int ip) {
          try {
               byte[] bytes = new byte[4];
               bytes[0] = (byte) (0xff & ip);
               bytes[1] = (byte) ((0xff00 & ip) >> 8);
               bytes[2] = (byte) ((0xff0000 & ip) >> 16);
               bytes[3] = (byte) ((0xff000000 & ip) >> 24);
               return Inet4Address.getByAddress(bytes).getHostAddress();
          } catch (Exception e) {
               return "";
          }
     }

     public int getConnNetId() {
          // result.SSID;
          mWifiInfo = mWifiManager.getConnectionInfo();
          return mWifiInfo.getNetworkId();
     }

     /**
     * Function:信号强度转换为字符串<br>
     *
     * @author ZYT DateTime 2014-5-14 下午2:14:42<br>
     * @param level
     *            <br>
     */
     public static String singlLevToStr(int level) {

          String resuString = "无信号";

          if (Math.abs(level) > 100) {
          } else if (Math.abs(level) > 80) {
               resuString = "弱";
          } else if (Math.abs(level) > 70) {
               resuString = "强";
          } else if (Math.abs(level) > 60) {
               resuString = "强";
          } else if (Math.abs(level) > 50) {
               resuString = "较强";
          } else {
               resuString = "极强";
          }
          return resuString;
     }

     /**
     * 添加到网络
     *
     * @param wcg
     */
     public boolean addNetwork(WifiConfiguration wcg) {
          if (wcg == null) {
               return false;
          }
          int wcgID = mWifiManager.addNetwork(wcg);
          boolean b = mWifiManager.enableNetwork(wcgID, true);
          mWifiManager.saveConfiguration();
          Log.i(Constant.LOG_NAME, b + "");
          return b;
     }

     public boolean connectSpecificAP(ScanResult scan) {

          List<WifiConfiguration> list = mWifiManager.getConfiguredNetworks();
          boolean networkInSupplicant = false;
          boolean connectResult = false;
          // 重新连接指定AP
          mWifiManager.disconnect();
          // 阻塞线程连接网络
          for (WifiConfiguration w : list) {
               // 将指定AP 名字转化并连接网络
               if (w.BSSID != null && w.BSSID.equals(scan.BSSID)) {
                    connectResult = mWifiManager.enableNetwork(w.networkId, true);
                    networkInSupplicant = true;
                    break;
               }
          }

          if (!networkInSupplicant) {
               WifiConfiguration config = CreateWifiInfo(scan, "");
               connectResult = addNetwork(config);
          }

          try {
               Thread.sleep(3000);
          } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }

          return connectResult;
     }

     // 然后是一个实际应用方法,只验证过没有密码的情况:
     public WifiConfiguration CreateWifiInfo(ScanResult scan, String Password) {
          WifiConfiguration config = new WifiConfiguration();
          config.hiddenSSID = false;
          config.status = WifiConfiguration.Status.ENABLED;

          if (scan.capabilities.contains("WEP")) {
               config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
               config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
               config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);

               config.SSID = "\"" + scan.SSID + "\"";

               config.wepTxKeyIndex = 0;
               config.wepKeys[0] = Password;
          } else if (scan.capabilities.contains("PSK")) {
               config.SSID = "\"" + scan.SSID + "\"";
               config.preSharedKey = "\"" + Password + "\"";
          } else if (scan.capabilities.contains("EAP")) {
               config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
               config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
               config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
               config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
               config.SSID = "\"" + scan.SSID + "\"";
               config.preSharedKey = "\"" + Password + "\"";
          } else {
               config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

               config.SSID = "\"" + scan.SSID + "\"";
               config.preSharedKey = null;
          }
          return config;
     }

     /**
     * 判断wifi是否加密
     */
     public static boolean getSecurity(ScanResult result) {

          if (result.capabilities.contains("WEP") || result.capabilities.contains("PSK")
                    || result.capabilities.contains("EAP")) {
               return true;
          } else {
               return false;
          }
     }

     /**
     * 判断wifi是否连接
     *
     * @param context
     * @return
     */
     public boolean isWifiConnected(Context context) {
          if (context != null) {
               ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                         .getSystemService(Context.CONNECTIVITY_SERVICE);
               NetworkInfo mWiFiNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
               if (mWiFiNetworkInfo != null) {
                    return mWiFiNetworkInfo.isAvailable();
               }
          }
          return false;
     }

     /**
     * 获取网络连接类型
     *
     * @return
     */
     public String getNetType() {
          String type = "";
          ConnectivityManager connectMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
          NetworkInfo info = connectMgr.getActiveNetworkInfo();
          if (1 == info.getType()) {
               return "wifi";
          } else {
               int subType = info.getSubtype();
               if (subType == TelephonyManager.NETWORK_TYPE_CDMA || subType == TelephonyManager.NETWORK_TYPE_GPRS
                         || subType == TelephonyManager.NETWORK_TYPE_EDGE) {
                    return type = "2g";
               } else if (subType == TelephonyManager.NETWORK_TYPE_UMTS || subType == TelephonyManager.NETWORK_TYPE_HSDPA
                         || subType == TelephonyManager.NETWORK_TYPE_EVDO_A
                         || subType == TelephonyManager.NETWORK_TYPE_EVDO_0
                         || subType == TelephonyManager.NETWORK_TYPE_EVDO_B) {
                    return type = "3g";
               } else if (subType == TelephonyManager.NETWORK_TYPE_LTE) {
                    // LTE是3g到4g的过渡,是3.9G的全球标准
                    return type = "4g";
               }
          }
          return type;
     }

     /**
     * 判断wifi打开状态
     *
     * @return
     */
     public boolean checkNetCardState() {
          boolean flag = false;
          if (mWifiManager.getWifiState() == 0) {
               flag = false;
          } else if (mWifiManager.getWifiState() == 1) {
               flag = false;
          } else if (mWifiManager.getWifiState() == 2) {
               Log.i("", "网卡正在打开");
          } else if (mWifiManager.getWifiState() == 3) {
               flag = true;
          } else {
               flag = false;
          }
          return flag;
     }

     /**
     * wifi重连
     *
     * @return boolean
     */
     public boolean wifiReConnect() {
          return mWifiManager.reconnect();
     }

     /**
     * 网络是否可用
     *
     * @param activity
     * @return
     */
     public static boolean isNetworkAvailable(Context context) {
          ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity == null) {
          } else {
               NetworkInfo[] info = connectivity.getAllNetworkInfo();
               if (info != null) {
                    for (int i = 0; i < info.length; i++) {
                         if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                              return true;
                         }
                    }
               }
          }
          return false;
     }

     @Override
     public int compare(ScanResult lhs, ScanResult rhs) {
          // TODO Auto-generated method stub
          if (Math.abs(lhs.level) - Math.abs(rhs.level) <= 0)
               return 1;
          else
               return -1;
     }
    
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值