android中的WIFI开发
来源:互联网 发布:windows日志怎么看sql 编辑:程序博客网 时间:2024/05/21 14:07
最近上班,写了一个很长很长的WIFI模块设置模块,就像是所有系统都自带的WIFI设置模块一样(难道又做无用功?)。。。
关于参考:参考了很多的大神的WIFI编程,但是基本都是转发的别人的(转了又转。。。转了又转),所以我就不注明哪里看的了,应为我也不知道谁是原创。
之所以别人都有,为什么还做这篇笔记呢。。。关键是大神们都是挑自己认为是重点的写。。。所以。。。找的我好辛苦啊。。。
切入主题,WiFi设置模块,首先我们打开以后,当然会搜索到附近的热点了。。。如何得到呢?
首先我们要先获取wifiManager对象。。。获取方式如下
WifiManager wifiManager =(WifiManager)SetWifi.this.getSystemService(Context.WIFI_SERVICE);然后就能获取WIFI热点的对象的链表了。。。
List<ScanResult> list = wifiManager.getScanResults();很简单吧。。。。最后
scanResult.SSID;//这个是热点的SSIDscanResult.level;//这个是热点的信号强度
最后你用你想要的方式把这些WIFI热点表现出来就好了。。。
接下来该链接这些热点了
public WifiConfiguration CreateWifiInfo(String SSID, String Password,int Type) {WifiConfiguration config = new WifiConfiguration();config.allowedAuthAlgorithms.clear();config.allowedGroupCiphers.clear();config.allowedKeyManagement.clear();config.allowedPairwiseCiphers.clear();config.allowedProtocols.clear();config.allowedGroupCiphers.clear();config.allowedPairwiseCiphers.clear();config.SSID = "\"" + SSID + "\"";if (Type == WIFICIPHER_NOPASS) {config.wepKeys[0] = "";config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.wepTxKeyIndex = 0;}if (Type == WIFICIPHER_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;}if (Type == WIFICIPHER_WPA) {Log.v("my_tag", "开始配置WPA热点");config.preSharedKey = "\"" + Password + "\"";config.hiddenSSID = true;config.status = WifiConfiguration.Status.ENABLED;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.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);}return config;}这是一个初始化WifiConfiguration的接口,你把SSID,密码,还有该热点的加密类型传进来就OK了,这里抱歉下 只有WPA加密方式和没有密码的通过了验证。。。(我参考的都是只有无密码验证过哦,WEP我附近没有这样的热点。。。还有TYPE的宏是自己定义的哦)
接下来就连接这个WIFI热点
wifiManager.addNetwork(wifiConfiguration);记得连接到WIFI热点以后要上WIFI锁,什么是WIFI锁自己度娘吧
/**创建一个WIFILOCK*/public void createWifiLock (){mywifiLock = myWifiManager.createWifiLock("bohua");}/**锁定一个WIFILOCK*/public void acquireWifiLock (){mywifiLock.acquire();}/**解锁一个wifilock,这个要在断开连接时调用*/public void releaseWifiLock(){if(mywifiLock != null){if(mywifiLock.isHeld()){mywifiLock.acquire();}}}那我们该怎么断开连接呢?
public int getNetworkId(){return (myWifiInfo == null ) ? 0 : myWifiInfo.getNetworkId();}
int id = getNetworkId();wifiManager.disableNetwork(id);wifiManager.disconnect();
...这样,我们就能看到周围的热点,连接它,然后再断开它。
然后我们就再想想WIFI设置还有什么其他的功能?
首先人家能打开和关闭WIFI模块。
/*用于打开WIFI*/public void openWifi(){if(!wifiManager.isWifiEnabled() && wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLING){wifiManager.setWifiEnabled(true);}}/*关闭WIFI*/public void closeWifi(){if(wifiManager.isWifiEnabled() &&wifiManager.getWifiState() != WifiManager.WIFI_STATE_DISABLING){<span style="white-space:pre"></span>//如果加了WIFI锁记得解锁哦wifiManager.setWifiEnabled(false);}}
这个我们实现的方法是把热点信息储存到SharedPreferences?文件?数据库?,然后。。。检测?。。。连接?
最后人家能有各种连接的信息。。。。
WifiInfo wifiInfo = wifiManager.getConnectionInfo();int id = wifiInfo.getNetworkId();String BSSID = wifiInfo.getBSSID();boolean ifSSIDHidden = wifiInfo.getHiddenSSID();//判断SSID是否被隐藏int ipaddress = wifiInfo.getIpAddress();int linkspeed = wifiInfo.getLinkSpeed();String macaddr = wifiInfo.getMacAddress();int rssi = wifiInfo.getRssi();String ssidhehe = wifiInfo.getSSID();
这样就获得了这些连接的数据,至于这些数据怎么用。。。别人有写。。。不多赘述。。。
但是这样写出了代码真的好用吗。。。其实就不能用。。。在写这些代码的时候有些需要注意的地方。。。再这先写出来。。。因为我是新手所以有什么更犀利的做法请大神指出。。。。
android.net.NetworkInfo.State state;//表示当前WIFI网络的连接状态state = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();while(state != android.net.NetworkInfo.State.CONNECTED){try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}};上面是连接到WIFI热点的“润滑剂”,如果连接到WIFI之后要执行网络的操作的话,这个是必须要等待的
while (wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED);try {Thread.sleep(1000);} catch (InterruptedException e2) {// TODO 自动生成的 catch 块e.printStackTrace();}上面则是对WIFI模块的检测。。。。他有5个状态 。。 不一一赘述了。。。
加上上面这些就可以用了。。。。但是如何写的好久请大神指点了
0 0
- android中的WIFI开发
- Android中的WiFi开发简明教程
- Android中的WIFI模块开发思路
- Android开发--WIFI开发
- Android中的WiFi P2P
- Android中的wifi 概述
- Android wifi开发
- android wifi驱动开发
- Android开发 --- Wifi 管理
- android WIFI连接开发
- android WIFI连接开发
- Android WIFI开发
- android之wifi开发
- android WIFI连接开发
- android wifi开发介绍
- Android WIFI开发
- android wifi开发
- Android wifi开发
- VB.net中的窗体继承
- Cocos2d-x 3.0 开发(十六)cocos2dx-3.0beta版建立新项目并加载CocoStudio导出文件
- 3sum 3个数的和(重)
- 嵌入式 Linux环境进程间通信(五): 共享内存(上)
- object-c基础知识(不断更新)
- android中的WIFI开发
- 门面模式
- jquery验证规则
- 嵌入式 Linux消息队列之命令行相关
- 操作系统,C++,计算机网络,各种大杂烩
- Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面
- 嵌入式 Linux 进程间通信之消息队列的几点注意事项
- 思维导图MindManager使用说明
- python 模块-使用HTMLParser 解析html