Android 中WiFi可以通过WifiManager.getConnectionInfo()接口来获取WiFi使用网口对应的MAC。
通过WifiInfo.getMacAddress()即可获取到对应的MAC。
/**
* Return dynamic information about the current Wi-Fi connection, if any is active.
* <p>
* In the connected state, access to the SSID and BSSID requires
* the same permissions as {@link #getScanResults}. If such access is not allowed,
* {@link WifiInfo#getSSID} will return {@code "<unknown ssid>"} and
* {@link WifiInfo#getBSSID} will return {@code "02:00:00:00:00:00"}.
*
* @return the Wi-Fi information, contained in {@link WifiInfo}.
*/
public WifiInfo getConnectionInfo() {
try {
return mService.getConnectionInfo(mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
下面看下在哪设置的MAC,开启WiFi,WifiStateMachine,会执行ConnectModeState enter函数的setupClientMode(),其中
会去设置MAC,mWifiInfo.setMacAddress(mWifiNative.getMacAddress(mInterfaceName));
最终也是根据WiFi使用的网口去获取的对应的MAC。
同理,热点则可以在SoftApManager中,开启热点时,获取到热点使用的网口,然后根据这个网口获取到对应的MAC,,然后以接口的形式提供出去。
可以使用NetworkInterface中的接口来获取MAC。
NetworkInterface.getByName:搜索具有指定名称的网络接口。
NetworkInterface.getHardwareAddress:然后获取到对应网口的MAC。
|