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

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

本文转自多看一二 并作补充

起因

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

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

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

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

好了 那么问题就简单了

直接贴代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
BufferedReader br = null;
ArrayList<ClientScanResult> 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目录 里面有很多很多信息