Android 开启个人热点时 获取连接人数以及连接上的设备信息

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

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

首先 连接热点的所有信息都保存在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目录 里面有很多很多信息






你可能感兴趣的:(安卓日常笔记,Android获取连接热点人数,Android,个人热点问题,安卓日常笔记)