转载自:http://blog.csdn.net/swqqcs/article/details/7493374
通过程序来实现wifi的自动连接。
这两天对android的wifi功能研究了一下。下面共享出自己封装的WifiConnect类。(这里参考了ZXing开源项目中wifi模块)
首先,要了解android关于wifi的API.
如果你喜欢看English API,这是android关于wifi的API地址:
http://developer.android.com/reference/android/net/wifi/package-summary.html(配置Wifi,还需要设定权限,android中关于wifi的API文档中说明了要添加什么权限)
如果你一看英语就头疼,这里有关于wifi的api的中文解释
http://note.sdo.com/u/1500295617/n/prb71~jGAHfpnM0l000bgN
切入正题,这里贴出一个封装了的类(WifiConnect),在实例化WifiConnect对象时,需要传入一个WifiManager对象。WifiConnect类向外部提供一个Connect方法,参数是无线的SSID,password,还有加密类型。
- /*
- * 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;
- }
- }
相关推荐
androidwifi自动连接,也可手动连接,开发时根据需求更改
支持获取网络连接列表,wifi连接 /** * 扫描周边网络 */ public void scan() { // openWifi(); mWifiManager.startScan(); // 得到扫描结果 listResult = mWifiManager.getScanResults(); // 得到配置好的...
android 指定wifi热点自动连接
Android下自动连接指定SSID的WIFI的简单实现的demo, 需求分析:在很多的智能设备上并没有可用于交互的界面。这种情形在智能设备就可以提供指定SSID和密码的wifi自动连接。
本项目是一个实现自动连接指定的wifi的功能,可以检测要连接的wifi是否在可连接范围内,若在可连接范围内,则进行连接;否则提醒用户,程序结束。注意:此处要连接的wifi是已经配置好的,就是之前已经连接过的。程序...
android wifi自动连接
自动连接已经配置好的wif,相关博文:http://www.cnblogs.com/tianzhijiexian/p/3988203.html
Android 扫描 wifi 二维码自动连接。 原文连接地址 http://blog.csdn.net/android_cmos/article/details/52214560 Android
android实现自动连接WIFI,方便用户做重复工作。
android wifi列表显示,点击输入密码连接,断开,打开wifi开关,自动识别连接
判断WIFI是否开启,开启后自动扫描周围热点,选择热点后输入密码连接
自动连接创建的wifi热点类,包含加密方式WPA2_PSK和WPA_PSK ,同时解决部分android手机自动连接热点导致被切换的问题,在我的前一个demo,android 解决部分手机连接热点wifi导致被切换(链接:...添加了包含了WPA2_PSK...
介绍在Qt项目里,如何编译代码在Android设备上上设置连接到指定的WIFI。 自动连接WIFI。
不知道各位有没有这样的经历,一个地方的wifi信号比较多,但是有强有弱,手机往往是自动连接的,可能不是最适合自己的那个信号,所以需要自己手动选择较强一点的,而当自己稍微走到不远的另一个地方时该手动选择的又...
主要介绍了Android10自动连接WiFi问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Android蓝牙2.0串口通信代码,自动搜索,自动连接.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android扫描wifi二维码自动连接.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
说明:本文主要说明扫码之后自动连接WiFi的一些处理,扫码的流程相对简单,网上教程也比较多,对于目前Android各个版本也没有太多变化。 问题描述:最近在做项目的时候,发现以前的项目有扫描二维码自动连接WiFi的...
存在的问题:在真机测试时,我的手机安卓9,在使用addNetwork()方法时功能是正常的,当换一个手机的时候(Android10)时发现连接WiFi的功能无法使用,在网上查阅资料,后发现安卓9和安卓10的连接WiFi的方法不一样...
将Android手机WiFi连接到指定的热点