Android获取用户ip地址

public class NetManager {

    /**
     * 获取用户IP地址<br/>
     * 注意:需要在androidManifest.xml中声明下面三个权限才能正常使用该方法,否则会空指针异常
     * <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     * <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     * <uses-permission android:name="android.permission.INTERNET"/>
     */
    public static String getIpAddress(Context context) {
        if (context == null) {
            return "";
        }

        ConnectivityManager conMann = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mobileNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        NetworkInfo wifiNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        if (mobileNetworkInfo.isConnected()) {
            return getLocalIpAddress();
        } else if (wifiNetworkInfo.isConnected()) {
            return getWifiAddress(context);
        }
        return "";
    }

    private static String getLocalIpAddress() {
        try {
            ArrayList<NetworkInterface> nilist = Collections.list(NetworkInterface.getNetworkInterfaces());
            for (NetworkInterface ni : nilist) {
                ArrayList<InetAddress> ialist = Collections.list(ni.getInetAddresses());
                for (InetAddress address : ialist) {
                    if (!address.isLoopbackAddress() && address instanceof Inet4Address) {
                        return address.getHostAddress();
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
        return "";
    }

    private static String getWifiAddress(Context context) {
        if (context == null) {
            return "";
        }
        WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int ipAddress = wifiInfo.getIpAddress();
        return intToIp(ipAddress);
    }

    private static String intToIp(int ipInt) {
        String s = (ipInt & 0xFF) + "." +
                ((ipInt >> 8) & 0xFF) + "." +
                ((ipInt >> 16) & 0xFF) + "." +
                ((ipInt >> 24) & 0xFF);
        return s;
    }
}

经过实测,并不能真的获取到网络上实际的外网IP地址,只能拿到他下面的内网IP地址,凑合着用吧

参考来源:https://blog.csdn.net/sinat_16458039/article/details/50260589

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android设备上,IP冲突指的是多个设备或应用程序尝试使用相同的IP地址,导致网络中存在冲突。这种情况可能会导致网络连接问题和通信故障。 当Android设备检测到IP冲突时,通常会采取以下步骤来解决问题: 1. 检测冲突:Android设备会通过发送ARP(Address Resolution Protocol)请求来检测网络中是否有其他设备使用了相同的IP地址。 2. 警告提示:如果Android设备检测到IP冲突,它会弹出一个警告提示,通知用户发生了IP冲突,并建议采取相应的解决措施。 3. IP地址更改:Android设备会尝试自动更改其IP地址,以避免与其他设备冲突。它会向DHCP服务器请求获取新的IP地址和其他配置信息。 4. 重新连接网络:在更改IP地址后,Android设备会重新连接到网络,并尝试建立正常的网络连接。 如果Android设备无法解决IP冲突,可能需要手动干预来解决问题: 1. 修改IP地址:在Android设备的网络设置中,手动修改IP地址,确保与其他设备不发生冲突。 2. 重启路由器:如果多个设备都遇到IP冲突问题,可以尝试重启路由器,以重新分配IP地址和清除任何冲突。 3. 管理网络设备:确保网络中的所有设备都具有唯一的IP地址,并确保没有重复分配相同的IP地址。 请注意,在处理IP冲突时,应当注意网络中的其他设备和网络配置,以确保解决冲突后的网络连接稳定和正常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值