Android WiFi功能实现,知其然必知其所以然! (二)

终于吧WiFi功能搞定了,前后历时半个多月的时间。进度有些慢。但还是很充实的,搞定一个自己面临的难题时,那种豁然开朗的感觉,让人神清气爽。要不是在公司上班时间,真想大吼一声!“咱老百姓啊,今儿个真高兴。。”

我想爱哥,鸿洋和老郭在此的话,肯定嗤之以鼻,心里碎碎念:老子搞个妞都没这么麻烦。。哈哈。

讲一讲昨晚的趣事,话说昨晚同窗好友邀我LOL战斗个三百回合,我本想拒绝,因为我是爱学习的孩子。后来想一想,劳逸结合才是上上策。于是欣然赴约。进游戏所有人都秒选,奈何我新号没啥英雄,所以看到免费英雄里有我的最爱--阿卡利(我的成名英雄)。只好用她打野。第一局顺风顺水,成功走上超神之路。可惜第二局我还是被迫选得阿卡利打野,然而竟让我伙的狗熊质疑我。真是是可忍孰不可忍,叔叔可以忍我不能忍。于是我小宇宙爆发,成功拿下红蓝Buff,以及对方打野两次人头后。狗熊感觉他的世界观崩溃了。开始疯狂的送人头,送谁不好偏偏送对方卡特。于是乎,我们的末日来临了。我方内部开始君子行动,君子动口不动手的原则,不断的慰问狗熊。我明知的分析,光慰问是赢不了的。所以在我采取敌进我退,敌退我偷的战略后。距离成神仅一步之遥,然后惜败。整整30多分钟,狗熊送了40多人头。也苦了这孩子了。。。待我收拾妥当准备休息时,隔壁大吼一声:该出手时就出手啊!!然后就是掀桌子扔板凳紧接着就是噼噼啪啪伴随着惨叫声不绝于耳我的第一反应是完了狗熊被人肉了!!(所谓:句读之不知,惑之不解。我就想看看有多少人看懂了这句话。哈哈)于是幸灾乐祸的熄灯睡觉。

闲言少叙,言归正传,咱们代码说事。

在上一篇文章Android WiFi功能实现,知其然必知其所以然!(一)中,我封装了几个WiFi常见处理的方法,详情请跳转。但,这里也要声明一些问题。对于上一篇文章,WiFi的创建,配置,搜索,关闭等方法都没有错。但一直没有成功的链接到指定的WiFi或WiFi热点上。是上一篇悬而未解的疑案。经过我新的一周的不懈努力,终于发现问题所在,最终的问题是出在对WiFi链接的理解上。这里给大家带来的不便,尽请谅解。现在重新解释一下,WiFi热点,其实也是WiFi。不要把热点和WiFi区分开,他们的区别在直观上给我们的印象是,WiFi--比如路由器的无线网络,热点--比如手机发射的无线信号。其实他们是没有区别的。都是WiFi热点。只不过信号源有区别罢了。

理解到这里,那自然一切都明白了,创建手机WiFi热点,用的是系统提供的创建热点的API,而热点也是WiFi,在链接热点时,其实也就是链接WiFi,那么,用平时的WiFi链接方法,就一切OK了。(在这之前,由于没有认真分析这之前的关系,一直以为WiFi是WiFi,热点是热点,然后就出现了,在用链接热点的方法链接热点时,方法返回链接成功的状态,而却一直无法链接,这着实让我纠结好一阵子。)

接下来,看看代码实现。

WifiHotspotUtils.java------WiFi热点工具类

package com.lizhipeng.wifiHotPoint.activity.utils;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;

import com.lizhipeng.wifiHotPoint.activity.MainActivity;

import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;

/**
 * WiFi热点工具类
 * 
 * @author lizhipeng
 * 
 */
public class WifiHotspotUtils {

	public static final String TAG = "WifiHotPointUtils";

	public static WifiConfiguration createWifiInfo2(String ssid,
			String password, int paramInt) {
		WifiConfiguration config = new WifiConfiguration();
		config.allowedAuthAlgorithms.clear();
		config.allowedGroupCiphers.clear();
		config.allowedKeyManagement.clear();
		config.allowedPairwiseCiphers.clear();
		config.allowedProtocols.clear();

		config.SSID = ssid;

		if (paramInt == 1) // WIFICIPHER_NOPASS 不加密
		{
			config.wepKeys[0] = "";
			config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
			config.wepTxKeyIndex = 0;
			return config;
		}
		if (paramInt == 2) // WIFICIPHER_WEP WEP加密
		{
			config.hiddenSSID = true;
			config.wepKeys[0] = password;
			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;
			return config;
		}
		if (paramInt == 3) // WIFICIPHER_WPA 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);
			config.status = WifiConfiguration.Status.ENABLED;
			return config;
		}
		return null;// 返回null,创建热点失败
	}

	/**
	 * 创建WiFi热点
	 * @param wifiManager WiFi管理器
	 * @param config WiFi配置信息
	 * @param paramBoolean true为开启WiFi热点,false为关闭
	 * @return 返回开启成功状态,true为成功,false为失败
	 */
	public static boolean createWiFiAP(WifiManager wifiManager,WifiConfiguration config, boolean paramBoolean) {
		// 开启热点前,如果WiFi可用,先关闭WiFi  
        if (wifiManager.isWifiEnabled()) {  
            wifiManager.setWifiEnabled(false);  
        }  
        Log.i(TAG, "into startWifiAp() 启动一个Wifi 热点!");  
        boolean ret = false;  
        try {  
        	Method method = wifiManager.getClass().getMethod("setWifiApEnabled",  
                    WifiConfiguration.class, boolean.class);
            ret = (Boolean) method.invoke(wifiManager, config, paramBoolean);  
        } catch (IllegalArgumentException e) {  
            e.printStackTrace();  
            Log.d(TAG, "stratWifiAp() IllegalArgumentException e");  
        } catch (IllegalAccessException e) {  
            e.printStackTrace();  
            Log.d(TAG, "stratWifiAp() IllegalAccessException e");  
        } catch (InvocationTargetException e) {  
            e.printStac
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值