文档章节

Android编程实现连接Wifi(运用Wifi 相关 API)

simpower
 simpower
发布于 2014/08/21 19:05
字数 342
阅读 36
收藏 0
 /*
*  WifiConnect.java
* Author: cscmaker
*/
package com.wifi.connect;
import java.util.List;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;
public class WifiConnect {
    WifiManager wifiManager;
    
//定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况
    public enum WifiCipherType
    {
     WIFICIPHER_WEP,WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID
    }
 
//构造函数
 public WifiConnect(WifiManager wifiManager)
 {
   this.wifiManager = wifiManager;
 }
 
//打开wifi功能
     private boolean OpenWifi()
     {
      boolean bRet = true;
         if (!wifiManager.isWifiEnabled())
         {
          bRet = wifiManager.setWifiEnabled(true);  
         }
         return bRet;
     }
    
//提供一个外部接口,传入要连接的无线网
     public boolean Connect(String SSID, String Password, WifiCipherType Type)
     {
        if(!this.OpenWifi())
     {
       return false;
     }
//开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
//状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
        while(wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING )
        {
          try{
     //为了避免程序一直while循环,让它睡个100毫秒在检测……
              Thread.currentThread();
     Thread.sleep(100);
            }
            catch(InterruptedException ie){
           }
        }
       
    WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type);
  //
     if(wifiConfig == null)
  {
            return false;
  }
     
        WifiConfiguration tempConfig = this.IsExsits(SSID);
        
        if(tempConfig != null)
        {
         wifiManager.removeNetwork(tempConfig.networkId);
        }
        
      int netID = wifiManager.addNetwork(wifiConfig);
     boolean bRet = wifiManager.enableNetwork(netID, false);  
  return bRet;
     }
     
    //查看以前是否也配置过这个网络
     private WifiConfiguration IsExsits(String SSID)
     {
      List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();
         for (WifiConfiguration existingConfig : existingConfigs) 
         {
           if (existingConfig.SSID.equals("\""+SSID+"\""))
           {
               return existingConfig;
           }
         }
      return null; 
     }
     
     private WifiConfiguration CreateWifiInfo(String SSID, String Password, WifiCipherType Type)
     {
      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.status = WifiConfiguration.Status.ENABLED;  
      }
      else
      {
       return null;
      }
      return config;
     }
     
}

本文转载自:http://lszdb1983.blog.163.com/blog/static/20426348201241175717181/

simpower
粉丝 27
博文 646
码字总数 46970
作品 0
海淀
程序员
私信 提问
Android 支持网络协议以及简单用法

Android对网络编程提供3中接口,即:Java接口,Apache接口,Android接口。Android提供了对HTTP,SSL,Cookie,DHCP等协议的封装,并支持套接字编程,同时对UTI也提供了支持。另外,还提供了连...

Drealin
2012/09/19
956
0
Android之Wifi学习(2)------连接Wifi

之前有一篇文章已经简单的讲过Wifi的基本知识,请见Android之Wifi学习(1)。本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡、关闭无线网卡、检查网卡状态、扫描网络、扫描结...

晨曦之光
2012/03/05
8.5K
4
试谈android中WIFI源码

网上关于如何用代码设置wifi的文章一搜一大堆,小蒋在此就不再添乱了,我就试着给大家谈一谈wifi的源码吧。 首先,我还是得从代码入手,下面是设置打开wifi的相关代码: private WifiManage...

我不是咸蛋
2013/01/09
11.7K
1
安卓手机控制电脑源代码开源

安卓控制电脑 项目介绍:http://www.oschina.net/p/android-remote-control-computer osc@git地址:http://git.oschina.net/lujianing/android-remote-control-computer 实现功能: 鼠标控制......

蛙牛
2014/06/22
11.6K
5
Android手机Wi-Fi及 Wi-Fi直连

> Android WIFI: 当手机成功连接到Wi-Fi热点以后,手机所产生的上网流量都是通过Wi-Fi来传输的,而手机的移动流量会被禁用。但是,我们现在有特殊的业务需求,需要让手机成功连接Wi-Fi后还可...

desaco
03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部