主题:在手机开启热点网络的情况下,想要获取是哪个设备已经连接上了当前开启的热点。
实现思路:Android通过读取
/proc/net/arp
文件可以得到连接当前热点的设备信息,包括Mac地址、IP地址等信息。方法缺陷:在某个热点网络断连后,不能实时更新已连接到的热点网络设备信息!
一. 方法逻辑:
/**
* 获取连接到手机热点上的设备信息
* @return
*/
public List<HashMap> getConnectedApInfo() {
List<HashMap> connectedApInfo = new ArrayList<>();
try {
BufferedReader br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null) {
/**
* 获取到的数组结果,示例:[192.168.227.138, 0x1, 0x2, 82:64:5e:01:49:fc, *, wlan2]
*/
String[] splitted = line.split(" +");
HashMap hashMap = new HashMap();
//设备信息判断标准
if (splitted.length >= 4 && splitted[3].contains(":")) {
String ip = splitted[0]; //获取IP地址信息,代替设备名称
String address = splitted[3]; //获取Mac地址信息
hashMap.put("name", ip);
hashMap.put("address", address);
connectedApInfo.add(hashMap);
Log.d(TAG, "getConnectedApInfo(),获取连接到手机热点上的设备信息:" + Arrays.toString(splitted) + " connectedApInfo:" + connectedApInfo.size() + " " + connectedApInfo);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return connectedApInfo;
}
二. 拓展工具类,控制热点的开启和关闭,热点信息的获取:
import static android.content.Context.CONNECTIVITY_SERVICE;
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.ConnectivityManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import andro