当在Android设备终端上使用Wifi热点的时候,需要获知Wifi热点的运行状态,热点是否打开,连接到该WIFI热点的设备数量,以及连接设备的具体IP和MAC地址。

使用re文件管理器去"/proc/net/arp",打开,发现连接上热点的设备信息都在这里了,包括mac ip等。

鉴于此,我们可以在代码中打开该文件,并获取WIFI热点的信息。

获取WIFI热点状态的方法getWifiApState()和判断热点是否可用的方法isApEnabled(),在Android源码WifiManager.Java中已经实现,但是它们是Hide方法,在SDK层面是不能访问的,如要访问需要用到java反射的机制。具体代码实现如下:

其中定义WIFI AP的几个状态

[java] view plaincopy
  1. public static final int WIFI_AP_STATE_DISABLING = 10;
  2. public static final int WIFI_AP_STATE_DISABLED = 11;
  3. public static final int WIFI_AP_STATE_ENABLING = 12;
  4. public static final int WIFI_AP_STATE_ENABLED = 13;
  5. public static final int WIFI_AP_STATE_FAILED = 14;

对应于WifiMangaer.java中对这几个状态的定义。

获取WIFI热点的状态:

[java] view plaincopy
  1. public int getWifiApState(Context mContext) {
  2. WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
  3. try {
  4. Method method = wifiManager.getClass().getMethod("getWifiApState");
  5. int i = (Integer) method.invoke(wifiManager);
  6. Log.i(TAG,"wifi state:  " + i);
  7. return i;
  8. } catch (Exception e) {
  9. Log.e(TAG,"Cannot get WiFi AP state" + e);
  10. return WIFI_AP_STATE_FAILED;
  11. }
  12. }

判断Wifi热点是否可用:

[java] view plaincopy
  1. public boolean isApEnabled(Context mContext) {
  2. int state = getWifiApState(mContext);
  3. return WIFI_AP_STATE_ENABLING == state || WIFI_AP_STATE_ENABLED == state;
  4. }

获取链接到当前热点的设备IP:

[java] view plaincopy
  1. private ArrayList<String> getConnectedHotIP() {
  2. ArrayList<String> connectedIP = new ArrayList<String>();
  3. try {
  4. BufferedReader br = new BufferedReader(new FileReader(
  5. "/proc/net/arp"));
  6. String line;
  7. while ((line = br.readLine()) != null) {
  8. String[] splitted = line.split(" +");
  9. if (splitted != null && splitted.length >= 4) {
  10. String ip = splitted[0];
  11. connectedIP.add(ip);
  12. }
  13. }
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. return connectedIP;
  18. }
[java] view plaincopy
  1. //输出链接到当前设备的IP地址
  2. public void printHotIp() {
  3. ArrayList<String> connectedIP = getConnectedHotIP();
  4. StringBuilder resultList = new StringBuilder();
  5. for (String ip : connectedIP) {
  6. resultList.append(ip);
  7. resultList.append("\n");
  8. }
  9. System.out.print(resultList);
  10. Log.d(TAG,"---->>heww resultList="+resultList);
  11. }

当然在应用中要添加访问WIFI设备的权限:

[html] view plaincopy
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

否则将会提示如下错误:

Cannot get WiFi AP state

Android系统信息获取 之十四:获取WIFI热点相关信息相关推荐

  1. Xamarin.Android开发实践(十四)

    原文:Xamarin.Android开发实践(十四) Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xama ...

  2. Android开发问题集锦十四--绚丽的烟花

    Android开发问题集锦十四--绚丽的烟花 程序之美 前言 源码下载 程序之美 前言 随着一声突如其来的响声,打破了久违的不能喘息般的的寂静.一团彩色的光芒快速上升着,留下一线灰色的烟雾.啪!一朵& ...

  3. 百度地图根据经纬度获取国家、州市等地址相关信息

    这是一个简单的经纬度转换成具体地址信息,支持国际和国内经纬度转换. 效果如下图所示: function xmlToArray2($xml) { // 将XML转为array $array_data = ...

  4. Android抓包方法之Win7笔记本Wifi热点+WireShark工具

    Android抓包方法 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等. 第 ...

  5. HTML获取当前时间年月日时分秒等相关信息

    HTML获取当前时间年月日时分秒等相关信息 [方式一]获取整段时间 <!DOCTYPE html> <html lang="en"> <head> ...

  6. Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示

    上一篇:Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果).自定义背景图片.UI优化调整 添加管理城市 新版------------------- 一.添加管理城市页面 二.沉浸式 ...

  7. Android音频子系统(十四)------耳机杂音问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. 背景介绍: [前提条件]OPPO的模拟有线耳机 [操作步骤]打开全民K歌进行任意一首音乐K歌的时候 [实际结果]耳机里面有滋滋的杂音 [期望结果]耳机里面 ...

  8. Android OpenGLES2.0(十四)——Obj格式3D模型加载

    转自:http://blog.csdn.net/junzia/article/details/54300202 在博主<OpenGLES系列>文章中,最开始的几篇讲的就是OpenGL世界中 ...

  9. Android 开发:(十四)NavigationBar篇-自定义顶部导航栏

    本篇记录了navigation bar顶部导航栏的自定义方法,抛砖引玉,简单实现了常用的布局,在此基础上可添加较复杂的布局. 第一步:新建NavigationBar文件,继承与FrameLayout. ...

最新文章

  1. 6425C-Lab11 配置DNS
  2. python菜鸟基础教程-python基础菜鸟教程,Python的基础语法
  3. 编程语言python特点-Python程序特点
  4. python线程创建对象_Python多线程编程基础:如何创建线程?
  5. 长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素...
  6. ZZULIOJ 1105: 判断友好数对(函数专题)
  7. PHP高级教程-Session
  8. spring 事务的传播行为详解(转)
  9. 如何成为一名Go开发人员:总共分六步
  10. 复指数信号正交性的简单证明
  11. 万字讲述如何通过Doris构建数据中台
  12. 01 自然语言处理NLP介绍
  13. 使用APKTOOL 反编译APK 失败的解决方法
  14. python获取列表数字的下标
  15. QQ农场外挂开发实践
  16. am解调matlab程序,基于Matlab的AM调制解调.doc
  17. uni-app - Refused to display ‘xxx‘ in a frame because an ancestor violates the following Content Sec
  18. 对接阿里云短信服务(附视频教程)
  19. python代码实现贝叶斯公式
  20. SwiftUI如何在动画完成时得到通知

热门文章

  1. 工作中最重要的个人品质--独立
  2. @AuotoWired+@Qualifier(百度百科)
  3. 从零开始学wordpress 之四
  4. javax.servlet.http.HttpServletResponse接口(HTTP版本)
  5. Datamill 一个开源的框架
  6. 说话人识别----技术挑战点
  7. springmvc整合mysql_SpringMVC+Spring+Mybatis+Maven+mysql整合
  8. 【ROS】机器人编程实践
  9. linux emule 编译 wx-config --libs,Linux下的wxWidgets静态编译实现方法
  10. mysql技术blog_Mysql技术 - 包子博客 _ 关注互联网前端、开发、SEO、移动互联网应用技术...