Android 网络信息(IP地址、网关、掩码、MAC地址)

1,171 阅读2分钟

1、wifi连接判断

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
    // 网络可用
    // 在这里可以执行相关操作
    Log.d("Network", "网络可用");

} else {
    // 网络不可用
    // 在这里可以执行相关操作
    Log.d("Network", "网络不可用");
}

2、获取ip地址及信息

    //获取wifi的ip地址
private String getWifiIpAddress() {
        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        
        // 获取32位整型IP地址
        int ipAddress = wifiInfo.getIpAddress();

        //返回整型地址转换成“*.*.*.*”地址
        return String.format("%d.%d.%d.%d",
                (ipAddress & 0xff), (ipAddress >> 8 & 0xff),
                (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
    }

3、获取子网掩码

//获取子网掩码
public static String getWlan0Mask() {
    String TAG = "lanky";
    String Mask = defaultIP;
    try {
        Process process = Runtime.getRuntime().exec(new String[]{command});
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        do {
            String line = bufferedReader.readLine();
            if (line == null) {
                Log.d(TAG, "test: line is null");
                break;
            }
            if (line.startsWith("wlan0     ")) {
                Mask = defaultIP;
            }
            Mask = getLineMask(line).equals("") ?Mask:getLineMask(line);
            if (line.startsWith("p2p0      ")) {
                break;
            }
        } while (true);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return Mask;
}
private static String getLineMask(String line){
    String TAG = "mask";
    String IP = "";
    if (line.trim().matches("inet addr:(\d{1,3}\.){3}\d{1,3}( ){2}" +
            "(Bcast:(\d{1,3}\.){3}\d{1,3}( ){2}){0,1}" +
            "Mask:(\d{1,3}\.){3}\d{1,3}")) {
        String[] props = line.trim().split("( ){2}");
        for (String prop : props) {
            if (prop.length() == 0) {
                continue;
            }

            String[] kv = prop.split(":");
            if (kv[0].startsWith("inet addr")) {
                Log.d(TAG, "----ipAddr: " + kv[1]);
            } else if (kv[0].startsWith("Bcast")) {
                Log.d(TAG, "----Bcast: " + kv[1]);
            } else if (kv[0].startsWith("Mask")) {
                Log.d(TAG, "----mask: " + kv[1]);
                IP = kv[1];
            }
        }
    }
    return IP;
}

4、获取网关地址

//获取网关地址
public String getWifiIp() {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M) {
        return null;
    }
    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(this.WIFI_SERVICE);
    if (!wifiManager.isWifiEnabled()) {
        return null;
    }
    if (!wifiManager.isWifiEnabled()) {
        wifiManager.setWifiEnabled(true);
    }
    DhcpInfo dhcpinfo = wifiManager.getDhcpInfo();
    String serverAddress = getCorrectIPAddress(dhcpinfo.serverAddress);
    return serverAddress;
}
/**
 * 将获取的int转为真正的ip地址
 **/
private String getCorrectIPAddress(int iPAddress) {
    StringBuilder sb = new StringBuilder();
    sb.append(iPAddress & 0xFF).append(".");
    sb.append((iPAddress >> 8) & 0xFF).append(".");
    sb.append((iPAddress >> 16) & 0xFF).append(".");
    sb.append((iPAddress >> 24) & 0xFF);
    return sb.toString();
}

4、获取网关地址

清单文件中添加权限、方法一或方法二都可以...

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
方法一 1、
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
@SuppressLint("MissingPermission") String macAddress = wifiManager.getConnectionInfo().getMacAddress();
方法二 2、
try {
    List<NetworkInterface> networkInterfaceList = Collections.list(NetworkInterface.getNetworkInterfaces());
    for (NetworkInterface networkInterface : networkInterfaceList) {
        byte[] macBytes = networkInterface.getHardwareAddress();
        if (macBytes != null) {
            StringBuilder macAddressBuilder = new StringBuilder();
            for (byte b : macBytes) {
                macAddressBuilder.append(String.format("%02X:", b));
            }
            if (macAddressBuilder.length() > 0) {
                macAddressBuilder.deleteCharAt(macAddressBuilder.length() - 1);
            }
            String macAddress = macAddressBuilder.toString();
            // 处理获取到的MAC地址
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}