手机作为一种移动设备,自然是十分依赖Wifi的,通过Wifi我们才得以和其它的手机与电脑进行通信,下面说一下我对Wifi的理解,首先Wifi绝不是一种网络连接方式,Wifi只是网络连接的一种途径,通过Wifi我们可以连接到某一通向外网的路由器上,从而访问外网,也可以通过wifi组成一个小型局域网,与局域网内部的其它设备进行通信,这才是wfi最重要的作用.

 最近由于项目需要,要操作到手机Wifi,通过wifi连接到某一路由器从而与其它设备通信,开始,我采取的思路是局域网内的另一台设备做为热点,我的手机去连接它的热点,发现连接是可以连接上,但此时手机的wifi通道被占用,手机无法再连接到其它的网络了,这时手机就无法访问互联网,无奈只好采用另一种方式,就是让我的手机开热点,而其它设备连接我手机的热点,这样就不影响手机的上网,也能组成一个小型局域网与其它设备进行通信,折腾一番后,就将所有wifi操作封装为一个类,方便以后重用此类...声明以下这个类参考了网上许多大神的代码,自己主要是做了一个封装.

package com.example.wifidemo;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;import android.content.Context;
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.util.Log;/*** Wifi操作工具类,将WifiManager的操作封闭了一层* * @author rzq*/
public class WifiAdmin {private static WifiAdmin instance = null;/*** Wifi操作类*/private WifiManager mWifiManager;/*** 当前链接热点的详细信息(如果有连接的话)*/private WifiInfo mWifiInfo;/*** 附近所有可用热点集合*/private List<ScanResult> mWifiList;/*** 附近所有热点的配置信息*/private ArrayList<WifiConfiguration> mWifiConfigurations;private WifiLock mWifiLock;private WifiAdmin(Context context) {mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);// 返回当前连接的WIFI信息mWifiInfo = mWifiManager.getConnectionInfo();}public static WifiAdmin getInstance(Context context) {if (instance == null) {instance = new WifiAdmin(context);}return instance;}/*** 打开Wifi..*/public void openWifi() {if (!mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(true);}}/*** 关闭Wifi*/public void closeWifi() {if (mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(false);}}// 检查当前wifi状态public int checkState() {return mWifiManager.getWifiState();}// 锁定wifiLockpublic void acquireWifiLock() {mWifiLock.acquire();}// 解锁wifiLockpublic void releaseWifiLock() {// 判断是否锁定if (mWifiLock.isHeld()) {mWifiLock.acquire();}}// 创建一个wifiLockpublic void createWifiLock() {mWifiLock = mWifiManager.createWifiLock("test");}// 得到配置好的网络public ArrayList<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() {mWifiManager.startScan();// 得到扫描结果mWifiList = mWifiManager.getScanResults();// 得到配置好的网络连接,即所有附近可用的网络mWifiConfigurations = (ArrayList<WifiConfiguration>) 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、levelsb.append((mWifiList.get(i)).toString()).append("\n");}return sb;}public String getMacAddress() {return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();}public String getBSSID() {return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID();}public int getIpAddress() {return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();}// 得到连接的IDpublic int getNetWordId() {return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();}// 得到wifiInfo的所有信息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();}/*** 根据输入的SSID,密码,类型创建一个连接* * @param SSID* @param password* @param type*/public void connect(String SSID, String password, WifiCipherType type) {WifiConfiguration wifiConfig = createWifiInfo(SSID, password, type);addNetWork(wifiConfig);}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.equals(WifiCipherType.WIFICIPHER_NOPASS)) {config.wepKeys[0] = "";config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.wepTxKeyIndex = 0;}if (type.equals(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.equals(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);config.status = WifiConfiguration.Status.ENABLED;} else {return null;}return config;}// 定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况public enum WifiCipherType {WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID}/*** 开启wifi热点*/public void startWifiAp(String ssid, String password) {Method method = null;try {closeWifi(); //因为热点与wifi连接是不可同时启用的,所以打开热点前要关闭wifimethod = mWifiManager.getClass().getMethod("setWifiApEnabled",WifiConfiguration.class, boolean.class);WifiConfiguration netConfig = new WifiConfiguration();netConfig.SSID = ssid;netConfig.preSharedKey =  password;netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);method.invoke(mWifiManager, netConfig, true);} catch (Exception e) {e.printStackTrace();}}/**关闭wifi热点
public void closeWifiAp(WifiManager wifiManager) {if (isWifiApEnabled(wifiManager)) {try {Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");method.setAccessible(true);WifiConfiguration config = (WifiConfiguration) method.invoke(wifiManager);Method method2 = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class);method2.invoke(wifiManager, config, false);} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/**判断手机热点是否可用public boolean isWifiApEnabled(WifiManager wifiManager) {try {Method method = wifiManager.getClass().getMethod("isWifiApEnabled");method.setAccessible(true);return (Boolean) method.invoke(wifiManager);} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {e.printStackTrace();}return false;}
}

android wifi操作,热点创建相关推荐

  1. Android数据库操作-1

    Android采用关系型数据库SQLite3,它是一个支持SQL轻量级的嵌入式数据库,在嵌入式操作系统上有很广泛的应用,WM采用的也是SQLite3<?xml:namespace prefix ...

  2. Android WiFi热点完全研究(自定义创建、跳转系统界面设置、读取配置、切换,Android6.0适配)...

    前言: WiFi热点设置页面的安全性选项在Android 4.x上有"无"."WPA PSK"."WPA2 PSK"三个选项,在Androi ...

  3. android wifi热点的创建以及连接通信(华为T8951 Google GALAXY Nexus 测试通过)

                   参考网上的很多的资料,初步实现了wifi热点的创建.连接以及聊天通信,以下是网上广为流传的Wifi 三种配置: public WifiConfiguration crea ...

  4. Android -- Wifi热点的打开与关闭流程简介

    Android -- Wifi热点的打开与关闭流程简介 在Android手机中,热点也是一个较为常用的功能.对于framework开发者来说,要开发.维护SoftAp,了解framework中热点开关 ...

  5. Android WiFi开发教程(三)——WiFi热点数据传输

    在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...

  6. 笔记本wifi做热点 android通过热点上网

    在做android的时候,我们可能会用到web service 在myeclipse上发布一个web service服务,在手机上调用这个服务操作数据库,但是在模拟器上运行成功,但是在真机上就会显示程 ...

  7. linux源码共享,Android之高仿飞鸽传书热点创建与共享源码

    这两天,无意中看到飞鸽传书这个小东东,然后又突然对他的wifi热点创建与共享比较感兴趣,于是乎把他的APK给反编译了,很蛋疼的还原了一下他的这一小模块代码,感觉效果差不多,所以跟大家分享一下,下面我们 ...

  8. Android WiFi开发 (二)分享Wifi热点

    Android WiFi开发 (二)Wifi热点 标签: wi-fiandroid热点安全 2016-03-07 13:08  11415人阅读  评论(29)  收藏  举报   分类: Andro ...

  9. 用笔记本创建WiFi无线热点赚钱

    用笔记本创建WiFi无线热点赚钱 本文介绍如何利用Wiwiz HotSpot Builder系统在笔记本电脑上创建WiFi无线热点认证网关并实现计费管理. 随着WiFi与WLAN技术的普及,现在,架设 ...

  10. android代码删除wifi,Android Wifi的forget()操作实例详解_Android_脚本之家

    Android  Wifi的forget()操作实例详解 我们在处理某个Wifi连接时,有时会需要忘掉当前连接的密码信息.执行这项操作,我们需要调用WifiManager::forget()函数: / ...

最新文章

  1. 压缩文件夹_怎样压缩文件夹并发送
  2. Java8新特性系列(Lambda)
  3. MAC上最好用的免费全能音乐播放器VOX 2.6.5
  4. Linux的Nginx七:对比|模块
  5. recyclerView + GridLayoutManager 实现任意网格布局+拖拽排序
  6. 小a与黄金街道(欧拉函数)/**模运算规则总结*/
  7. 时间同步失败_关于同步、异常处理的思考
  8. 关于php的ifelse说法,PHP,否则elseif
  9. c++怎么打印出句子中的各个单词_小学英语单词汇总篇 身体 食品、饮料 蔬菜...
  10. 年度重磅!2020年度中国计算机视觉人才调研报告正式发布
  11. csv文件-读取方式、字典
  12. 微信小程序云开发教程-微信小程序的JS高级-全局数据读写
  13. Python网络编程、爬虫之requests模块使用
  14. 如何实现对合同进行智能化管理?
  15. KTV点歌系统数字点歌功能
  16. 2022年国家法定节假日放假时间安排
  17. C语言每日一练——第66天:委派任务问题
  18. 控件:可见、隐身、走开
  19. MySQL性能分析工具
  20. Soul源码总结-01-20

热门文章

  1. linux需要4k对齐么,linux查看硬盘4K对齐方法
  2. 使用JMH做Java微基准测试(三)测试参数状态State
  3. Python安装指南
  4. 工作心得_在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?
  5. python的DataFrame排序问题
  6. Java:对于Borderlayout布局管理的理解
  7. tensorflow学习笔记(3)梯度下降法进行曲线拟合和线性回归
  8. Bundle Adjustment原理及应用
  9. 非递归方式对二叉树进行前序、中序、后序遍历(C++实现)
  10. [Swift通天遁地]一、超级工具-(11)使用EZLoadingActivity制作Loading加载等待动画