android获取有线、wifi、3G(4G)的IP

本文介绍了一种在Android设备上使用Java代码获取不同网络类型(如3G/4G、WiFi、有线)下本地IP地址的方法。通过利用ConnectivityManager、NetworkInterface和WifiManager等API,该方法能适应多种网络环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//获取ip地址
public static String getLocalIPAddress(Context context) {
    NetworkInfo info = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    if (info != null && info.isConnected()) {
        if (info.getType() == ConnectivityManager.TYPE_MOBILE) {    //3G/4G网络
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                    NetworkInterface intf = en.nextElement();
                    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                            return inetAddress.getHostAddress();
                        }
                    }
                }
            } catch (SocketException e) {
                Log.e(TAG,"获取3G/4G网络IP失败");
            }
        } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {     // wifi
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            String ipAddress = int2Sip(wifiInfo.getIpAddress());
            return ipAddress;
        } else if (info.getType() == ConnectivityManager.TYPE_ETHERNET) {    //有线
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            Network network = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                network = mConnectivityManager.getActiveNetwork();
                LinkProperties linkProperties = mConnectivityManager.getLinkProperties(network);
                for (LinkAddress linkAddress : linkProperties.getLinkAddresses()) {
                    InetAddress address = linkAddress.getAddress();
                    if (address instanceof Inet4Address) {
                        return address.getHostAddress();
                    }
                }
            }
            return "0.0.0.0";
        }
    } else {
        return "0.0.0.0";
    }
    return null;
}

/**
 * 将ip的整数形式转换成ip形式
 * @param ip
 * @return
 */
public static String int2Sip(int ip) {
    StringBuilder sb = new StringBuilder();
    sb.append(ip & 0xFF).append(".");
    sb.append((ip >> 8) & 0xFF).append(".");
    sb.append((ip >> 16) & 0xFF).append(".");
    sb.append((ip >> 24) & 0xFF);
    return sb.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android_frost

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值