Getting IP address in a readable form android code

后端 未结 4 932
囚心锁ツ
囚心锁ツ 2021-01-26 04:31

I am new to android development and I am doing an application which sends the IP address of an android device to another one by sms. I need to get the IP in decimal like this 19

相关标签:
4条回答
  • 2021-01-26 04:48

    This post explains how to get the IP of the device.

    This bit of code (taken from the aforementioned post) should get you the IP address the correct way:

    public String getLocalIpAddress() {
        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()) {
                        return inetAddress.getHostAddress().toString();
                    }
                }
            }
        } catch (SocketException ex) {
            Log.e(LOG_TAG, ex.toString());
        }
        return null;
    }
    
    0 讨论(0)
  • 2021-01-26 04:58

    While hungr's answer is correct, I found that if I loop through the ip_addresses for a specific device "wlan0" for example, the first address is ipv6 and the second is ipv4. I was only returning the first value, which is why I was only getting a hex string.

    for (InetAddress inetAddress : Collections.list(inetAddresses)) {
                    String ip_address = inetAddress.getHostAddress();
                    Log.d(APP_NAME, "IP: " + ip_address);
                    //return if_name + ": " + ip_address;
    }
    

    Notice I commented out the "return"

    0 讨论(0)
  • 2021-01-26 04:58

    This info is available from the shell, using getprop command.

    0 讨论(0)
  • 2021-01-26 05:01
    public static String getLocalIpv4Address(){
        try {
            String ipv4;
            List<NetworkInterface>  nilist = Collections.list(NetworkInterface.getNetworkInterfaces());
            if(nilist.size() > 0){
                for (NetworkInterface ni: nilist){
                    List<InetAddress>  ialist = Collections.list(ni.getInetAddresses());
                    if(ialist.size()>0){
                        for (InetAddress address: ialist){
                            if (!address.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress())){ 
                                return ipv4;
                            }
                        }
                    }
    
                }
            }
    
        } catch (SocketException ex) {
    
        }
        return "";
    }
    

    Should this be ok ? This function will return ipv4 (in xxx.xxx.xxx.xxx pattern) only if available.

    Please note that those hexadecimal value you mentioned should be an ipv6 address.

    0 讨论(0)
提交回复
热议问题