最近在开发过程当中,遇到一个需求 ,开启个人热点后需要知道有多少人连上了这个热点 以及这些设备的信息

经过一段时间的摸索和反复的查阅资料,有了下面的代码和解决办法:

首先 连接热点的所有信息都保存在proc/net/arp下面 用re文件管理器可以查看一下

会发现 里面有连接的设备的 ip mac地址 等等  

好了 那么问题就简单了

直接贴代码:

BufferedReader br = null;ArrayList result = null;try {    result = new ArrayList<>();    br = new BufferedReader(new FileReader("/proc/net/arp"));//读取这个文件    String ss=br.toString();    String line;    while ((line = br.readLine()) != null) {        String[] splitted = line.split(" +");//将文件里面的字段分割开来        if (splitted.length >= 4) {            // Basic sanity check            String mac = splitted[3];// 文件中分别是IP address  HW type Flags HW address mask Device 
//然后我们拿取HW address  也就是手机的mac地址进行匹配  如果有 就证明是手机
            if (mac.matches("..:..:..:..:..:..")) {                boolean isReachable = InetAddress.getByName(splitted[0]).isReachable(reachableTimeout);                if (!onlyReachables || isReachable) {
                    result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5], isReachable));//最后如果能匹配 那就证明是连接了热点的手机  加到这个集合里 里面有所有需要的信息                }            }        }    }} catch (Exception e) {    CandyLog.e(e.getMessage());} finally {    try {        if (br != null) {            br.close();        }    } catch (IOException e) {        CandyLog.e(e.getMessage());    }}

public class ClientScanResult {    private String IpAddr;    private String HWAddr;    private String Device;    private boolean isReachable;    public ClientScanResult(String ipAddr, String hWAddr, String device, boolean isReachable) {        super();        this.IpAddr = ipAddr;        this.HWAddr = hWAddr;        this.Device = device;        this.isReachable = isReachable;    }    public String getIpAddr() {        return IpAddr;    }    public void setIpAddr(String ipAddr) {        IpAddr = ipAddr;    }    public String getHWAddr() {        return HWAddr;    }    public void setHWAddr(String hWAddr) {        HWAddr = hWAddr;    }    public String getDevice() {        return Device;    }    public void setDevice(String device) {        Device = device;    }    public boolean isReachable() {        return isReachable;    }    public void setReachable(boolean isReachable) {        this.isReachable = isReachable;    }}

好了 想要知道连接人数  只要得到集合的size就可以了  又解决一个问题  

关键点在于 热点信息储存在proc/net/arp 里面  有兴趣的可以了解下proc目录 里面有很多很多信息






更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 在Android中自定义捕获Application全局异常,可以替换掉系统的强制
  3. 在Android中播放音频和视频
  4. 用DownLoadManage封装一个App的更新组件(兼容android 6、7、8)
  5. 【Android】Android(安卓)Studio 查找工程中的无用资源文件和无
  6. 如何在Android的模拟器中的SD卡中添加文件
  7. Android如何正确的保存文件
  8. Android(安卓)酷炫来袭:制作属于你自己的音频播放器(综合运用Media
  9. 简单轻松!通过USB数据线,让Android(安卓)Studio连接到自己的安卓手

随机推荐

  1. 将HTML5封装成android应用APK
  2. Android(安卓)内存优化总结&实践
  3. Android高级开发教程实战视频
  4. Android(安卓)dip, dp, px, sp区别
  5. android studio 导入module作为lib使用
  6. Android(安卓)GPS架构分析(一)
  7. Android使用Fragment来实现TabHost的功能
  8. Android(安卓)View之基础介绍(Android开
  9. Android(安卓)6.0系统读写文件出现FileNo
  10. 关于xml中使用ImageView或ImageButton引