Android獲取手機及路由器的Mac地址和IP地址
阿新 • • 發佈:2019-02-15
Android獲取Mac地址及IP地址需要新增許可權,
在AndroidManifest.xml中:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
1、獲取手機的Mac地址,在Wifi未開啟或者未連線的情況下也能獲取手機Mac地址,程式碼如下:
public static String getMacAddress(Context context) {
String macAddress = null;
WifiInfo wifiInfo = getWifiInfo(context);
if (wifiInfo != null) {
macAddress = wifiInfo.getMacAddress();
}
return macAddress;
}
2、獲取手機IP地址,只有在Wifi連線的情況下才能獲取IP地址,否則為0,對應轉換IP為0.0.0.0,其中getIpAddress()獲取的IP地址是整型,需要轉換為IP地址。程式碼如下:
public static String getIpAddress(Context context) {
String IpAddress = null;
WifiInfo wifiInfo = getWifiInfo(context);
if (wifiInfo != null) {
IpAddress = intToIpAddress(wifiInfo.getIpAddress());
}
return IpAddress;
}
public static String intToIpAddress(long ipInt) {
StringBuffer sb = new StringBuffer();
sb.append(ipInt & 0xFF).append(".");
sb.append((ipInt >> 8) & 0xFF).append("." );
sb.append((ipInt >> 16) & 0xFF).append(".");
sb.append((ipInt >> 24) & 0xFF);
return sb.toString();
}
3、獲取路由器的Mac地址,只有連線成功才能獲取(廢話…),程式碼如下:
public static String getConnectedWifiMacAddress(Context context) {
String connectedWifiMacAddress = null;
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> wifiList;
if (wifiManager != null) {
wifiList = wifiManager.getScanResults();
WifiInfo info = wifiManager.getConnectionInfo();
if (wifiList != null && info != null) {
for (int i = 0; i < wifiList.size(); i++) {
ScanResult result = wifiList.get(i);
if (info.getBSSID().equals(result.BSSID)) {
connectedWifiMacAddress = result.BSSID;
}
}
}
}
return connectedWifiMacAddress;
}
完整的獲取Mac及IP地址工具類程式碼如下:
package com.cpxiao.wifimacdemo;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import java.util.List;
/**
* Created by cpxiao on 15/9/21.
*/
public class MacAddressUtils {
/**
* 獲取手機的Mac地址,在Wifi未開啟或者未連線的情況下也能獲取手機Mac地址
*/
public static String getMacAddress(Context context) {
String macAddress = null;
WifiInfo wifiInfo = getWifiInfo(context);
if (wifiInfo != null) {
macAddress = wifiInfo.getMacAddress();
}
return macAddress;
}
/**
* 獲取手機的Ip地址
*/
public static String getIpAddress(Context context) {
String IpAddress = null;
WifiInfo wifiInfo = getWifiInfo(context);
if (wifiInfo != null) {
IpAddress = intToIpAddress(wifiInfo.getIpAddress());
}
return IpAddress;
}
/**
* 獲取WifiInfo
*/
public static WifiInfo getWifiInfo(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = null;
if (null != wifiManager) {
info = wifiManager.getConnectionInfo();
}
return info;
}
public static long ipAddressToint(String ip) {
String[] items = ip.split("\\.");
return Long.valueOf(items[0]) << 24
| Long.valueOf(items[1]) << 16
| Long.valueOf(items[2]) << 8
| Long.valueOf(items[3]);
}
public static String intToIpAddress(long ipInt) {
StringBuffer sb = new StringBuffer();
sb.append(ipInt & 0xFF).append(".");
sb.append((ipInt >> 8) & 0xFF).append(".");
sb.append((ipInt >> 16) & 0xFF).append(".");
sb.append((ipInt >> 24) & 0xFF);
return sb.toString();
}
/**
* 獲取當前可連線Wifi列表
*/
public static List<?> getAvailableNetworks(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> wifiList = null;
if (wifiManager != null) {
wifiList = wifiManager.getScanResults();
}
return wifiList;
}
/**
* 獲取已連線的Wifi路由器的Mac地址
*/
public static String getConnectedWifiMacAddress(Context context) {
String connectedWifiMacAddress = null;
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> wifiList;
if (wifiManager != null) {
wifiList = wifiManager.getScanResults();
WifiInfo info = wifiManager.getConnectionInfo();
if (wifiList != null && info != null) {
for (int i = 0; i < wifiList.size(); i++) {
ScanResult result = wifiList.get(i);
if (info.getBSSID().equals(result.BSSID)) {
connectedWifiMacAddress = result.BSSID;
}
}
}
}
return connectedWifiMacAddress;
}
}