获取Wifi的控制类WifiManager。  WifiManager  wm=(WifiManager)getSystemService(Context.WIFI_SERVICE); 接下来可以对wifi操作了,比如要打开、关闭wifi,可以通过WifiManager的setWifiEnabled()方法来开关wifi。 若要查看一些信息,可以通过getConnectionInfo()方法得到WifiInfo类的对象,WifiInfo类里主要提供手机wifi上面存储的连接信息。 WifiInfo类方法: 1、getBSSID()   获取接入点的mac地址(String) 2、getIpAddress()  获取本机的IP地址   (int) 3、getLinkSpeed()  获取连接速度(不是下载速度),单位为Mbps  (int) 4、getMacAddress()  获取mac地址  (String) 5、getNetworkId()    获取网络id号。每一个设定好了的网络都有一个独一无二的整数型ID号,用来识别网络,当操作请求时(翻译)。简而言之,就是这个号就是代表一个连接点,手机可以通过wifi连接很多无线网的。 6、getRssi()       返回收到的信号强度,是个负数。(好像到-113就表示一点信号都没有,也就是说数越大信号就越好) 7、getSSID()    获取无线信号提供者的名称  (就是要连的网络的名字)(String) 上面那个类只能查到本机的mac地址与ip,要只查看本机的详细信息,可以通过这个类:DhcpInfo df=wm.getDhcpInfo(); DhcpInfo类没什么方法,提供了一些字段: 1、dns1   第一个DNS 2、dns2 如上 3、gateway   网关 4、ipAddress  IP地址 5、netmask 子网掩码 6、serverAddress 服务端地址(其实就是路由器ip,和网关一样) 7、leaseDuration   和上面的getLinkSpeed()  方法的值接近,可能是连接速度,不过单位不是Mbps,getLinkSpeed()  得到72,这个字段的值是7200
上面的IP与网关、子网掩码等都是int型数值,直接看看不懂,附上一个我写的方法把int转成String类型。

[java] view plaincopyprint?
  1. private String intToString(int a){
  2. StringBuffer sb=new StringBuffer();
  3. int b=(a>>0)&0xff;
  4. sb.append(b+".");
  5. b=(a>>8)&0xff;
  6. sb.append(b+".");
  7. b=(a>>16)&0xff;
  8. sb.append(b+".");
  9. b=(a>>24)&0xff;
  10. sb.append(b);
  11. return sb.toString();
  12. }
    private String intToString(int a){StringBuffer sb=new StringBuffer();int b=(a>>0)&0xff;sb.append(b+".");b=(a>>8)&0xff;sb.append(b+".");b=(a>>16)&0xff;sb.append(b+".");b=(a>>24)&0xff;sb.append(b);return sb.toString();}

WifiConfiguration 类主要提供一个wifi配置的所有信息 有如下字段(自己明白的不一定正确): BSSID 接入点的mac地址。 SSID    接入点的名字。 networkId  网络号 preSharedKey  WPA-PSK密码,如果有就会得到一个*(这玩意就是判断是不是有密码的) priority   优先级

status   连接状态,值是WifiConfiguration.Status中字段的一种。

WifiConfiguration.Status  提供了3个字段表示wifi连接的三种状态 1.CURRENT   值为0,表示处于连接状态 2.DISABLED   值为1,表示网络不可用 3. ENABLED   值为2,表示网络可用但没连接

ScanResult  wifi扫描到的接入点信息 1.BSSID 2.SSID  3.capabilities 4.frequency 5.level

关于接收WIFI状态改变接收广播信息:

ACTION:  WifiManager.WIFI_STATE_CHANGED_ACTION ( "android.net.wifi.WIFI_STATE_CHANGED")wifi状态变化触发,触发两次。

可接收两个信息:(键) (这个是监听wifi状态变化的,wifi状态变化并不包括wifi的连接状态,只是单纯的指示wifi的5种状态)

1. WifiManager.EXTRA_PREVIOUS_WIFI_STATE("previous_wifi_state") int型值  intent.getIntExtra("键",0);(第二个为得不到时的默认值)

2. WifiManager.EXTRA_WIFI_STATE("wifi_state") int型值   intent.getIntExtra("键",0);(第二个为得不到时的默认值)

ACTION: WifiManager.NETWORK_STATE_CHANGED_ACTION("android.net.wifi.STATE_CHANGE")wifi连接网络的状态广播,连接过程中接收多次,在连接过程中可与获取NetworkInfo对象,通过ni.getState()可以获取wifi连接状态。如果连接state处于connected状态,可以通过WifiManager.EXTRA_WIFI_INFO得到wifiInfo对象。(不重要细节:测试时发现 下面isconnected()方法为true时,这个广播还处于connecting状态,再一次广播才变成connected)

可接收两个信息:(键)

1. WifiManager.EXTRA_BSSID("bssid")         String类型值      intent.getStringExtra("键")

2. WifiManager.EXTRA_NETWORK_INFO("networkInfo")    T    getParcelableExtra(“键”)

ACTION: WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION( "android.net.wifi.supplicant.CONNECTION_CHANGE") 判断是否WIFI打开了,变化触发一次

可接收一个信息:(键)(这个应该是广播wifi启动状态的,true表示连接到wifi设备,一般在wifi state处于enable时得到,false则表示断开设备连接,wifi此时状态为disabling。这只是指机器内的wifi连接状态变化,与网络无关)

1. WifiManager.EXTRA_SUPPLICANT_CONNECTED("connected")    boolean类型返回值   intent.getBooleanExtra(“键”, true)第二个是默认值

ACTION: WifiManager.SUPPLICANT_STATE_CHANGED_ACTION("android.net.wifi.supplicant.STATE_CHANGE")发送WIFI连接的过程信息,如果出错ERROR信息才会收到。连接WIFI时触发,触发多次。

可接收两个信息:(键)

1. WifiManager.EXTRA_NEW_STATE("newState")           intent.getParcelableExtra("键")

2. WifiManager.EXTRA_SUPPLICANT_ERROR("supplicantError")        int型值  getIntExtra(“键”, int)

WIFI状态int值对应的状态:

WifiManager.WIFI_STATE_DISABLED ==1

WifiManager.WIFI_STATE_DISABLING ==0

WifiManager. WIFI_STATE_ENABLED==3

WifiManager. WIFI_STATE_ENABLING==2

WifiManager. WIFI_STATE_UNKNOWN==4

上面的是在有wifi的环境下测的,没在没WIFI的环境下测,不一定准,但差不多了。测试机型HTC G17。

如果在连接WIFI的过程中(Connecting),去连接网络地址(比如http://www.baidu.com)会得到找不到地址的异常,并且在8秒左右之内(就测了一台定制机),不能连接这一地址,否则报找不到地址异常。

这个包并不判断网络连接状态,只是判断wifi的各种状态,如果需要判断网络状态, 在android.net包中。ConnectivityManager 。


[java] view plaincopyprint?
  1. //判断WIFI是否连接
//判断WIFI是否连接
[java] view plaincopyprint?
  1. private boolean isConnected(Context context){
  2. ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  3. NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
  4. System.out.println(ni.getState());
  5. System.out.println(ni.getDetailedState()+"-----");
  6. if(ni != null && ni.getState()==State.CONNECTED)
  7. return true;
  8. return false;
  9. }
    private boolean isConnected(Context context){ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);System.out.println(ni.getState());System.out.println(ni.getDetailedState()+"-----");if(ni != null && ni.getState()==State.CONNECTED)return true;return false;}
[java] view plaincopyprint?
  1. private boolean isWifiConected(Context context) {
  2. WifiManager wm = (WifiManager) context
  3. .getSystemService(Context.WIFI_SERVICE);
  4. List<WifiConfiguration> list = wm.getConfiguredNetworks();
  5. Iterator<WifiConfiguration> it = list.iterator();
  6. while (it.hasNext()) {
  7. WifiConfiguration wc = it.next();
  8. if (wc.status == WifiConfiguration.Status.CURRENT)
  9. return true;
  10. }
  11. return false;
  12. }//2012.11.12在4.0机器上发现这个方法一直返回false,估计我理解错了,不要用。
  private boolean isWifiConected(Context context) {WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);List<WifiConfiguration> list = wm.getConfiguredNetworks();Iterator<WifiConfiguration> it = list.iterator();while (it.hasNext()) {WifiConfiguration wc = it.next();if (wc.status == WifiConfiguration.Status.CURRENT)return true;}return false;}//2012.11.12在4.0机器上发现这个方法一直返回false,估计我理解错了,不要用。

WifiInfo不为空并不代表这个类里面就存了信息,getMacAdress可能为空。

[java] view plaincopyprint?
  1. public String getMac() {
  2. WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
  3. WifiInfo wi = wm.getConnectionInfo();
  4. if(wi == null)
  5. return null;
  6. return wi.getMacAddress();
  7. }

android.net.wifi的简单使用方法相关推荐

  1. 【Android】41.最简单的方法设置沉浸状态栏

    41.最简单的方法设置沉浸状态栏 1.下载素材. 本节没有素材,如有素材,请公众号内获取. 2.导入依赖. // 基础依赖包,必须要依赖 implementation 'com.gyf.immersi ...

  2. win10 开机无法自动连接或重启才能连接WIFI的简单解决方法/2022.03

    某度的水贴和广告太多,经验之谈,简单分享 一.如果为品牌机正规操作系统,可以适当升级版本,然后完全重置win10网络设置,基本可以解决. (原因多数是操作不当,比如安装某管家,某大师,某精灵等,试图用 ...

  3. android获取wifi mac地址吗,Android 获取WIFI MAC地址的方法

    1. 经常用法,调用Android的API:WifiManager WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SER ...

  4. Android 一键退出程序最简单的方法 finishAffinity()

    我们不生产代码,我们知识代码的搬运工,如有侵权,本人将第一时间删除 邮箱:zhf6751134@163.com QQ交流群:336237986 在浏览google API Demo 时,发现一个很实用 ...

  5. android剪切板权限,android剪切板一些简单实用方法

    1.ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE) ...

  6. Android 11 WiFi启动流程

    欢迎大家一起学习探讨通信之WLAN.本节重点基于Android11分析讨论WiFi开启流程.用户点击一下"WiFi"开关,WiFi开启了.看似如此简单操作,但系统流程调用还是相当复 ...

  7. Android系统WIFI显示已保存但不会自动重连

    问题描述 使用Android设备,已经连接过的WIFI不会自动重连,且显示已保存 问题分析 显示已保存说明连接的WIFI信息已经保存,Android 11连接的WIFI信息保存在该文件/data/mi ...

  8. Android下自动连接指定SSID的WIFI的简单实现

    一.关于WiFi模块的概述: 1.在Android developer的文档中WiFi模块的信息: 首先,登记广播的监听:其次,请求扫描wifi信号:最后获取扫描到的wifi信息. 2.在广播监听到结 ...

  9. Android 在Fragment中执行onActivityResult不被调用的简单解决方法

    Android 在Fragment中执行onActivityResult不被调用的简单解决方法 参考文章: (1)Android 在Fragment中执行onActivityResult不被调用的简单 ...

最新文章

  1. 盘点图灵30篇最受欢迎微信文章
  2. 华为虚拟home键关闭_苹果iPhone12或放弃静音键,学华为mate30Pro,发力虚拟按键
  3. Codeforces 833B 题解(DP+线段树)
  4. [LeetCode] Single Number 单独的数字
  5. 计算机模块怎么算,计算基础
  6. angularjs 中 Factory,Service,Provider 之间的区别
  7. 力争营收渠道多样化,Line 向自拍应用 Snow 投资 4500 万美元
  8. 中采购订单批导的bapi_五:认识SAP SD销售模式之第三方销售和单独采购
  9. Node.js之------模块篇
  10. MySQL追加注释或者大量修改注释
  11. 计算机在矿山企业中的应用,计算机在矿山工业中的应用与发展
  12. 短时间让大家对C++ STL有所学习
  13. javaScript基础语法1
  14. 高亮显示不区分大小写的关键字——ASP
  15. Linux 文件,目录的属性
  16. 逐行分析jQuery源码
  17. MVC/POJO/POJI/DAO/DTO/VO
  18. 多看系统kindle最新版_谁说电气造价难?这样系统梳理一下简单多了!小白必看...
  19. 巡店系统如何应用于连锁加盟店管理
  20. [Luogu5042/UOJ #100][国家集训队互测2015]丢失的题面/ydc的题面

热门文章

  1. docker的介绍和常用命令
  2. Web缓存相关知识整理
  3. 使用JAVA爬取网页图片
  4. 华为S5024p交换机配端口镜像
  5. 查天气43课-46课
  6. WebSocket简单使用(二) - 客户端
  7. 01-Eureka是什么?
  8. Hadoop(HDFS,YARN)的HA集群安装
  9. quartz SpringMvc 动态定时任务(quartz2.2)
  10. 基于SpringMVC+EasyPoi,采用Excel模板方式实现Excel在线预览和导出(2021版)