Как получить настоящий IP-адрес? Я использую код ниже, результат всегда будет 127.0.0.1

if (getIpType(context) == IP_TYPE_WIFI) {

    WifiManager wifi_service = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    DhcpInfo dhcpInfo = wifi_service.getDhcpInfo();
    WifiInfo wifiinfo = wifi_service.getConnectionInfo();
    String ip = Formatter.formatIpAddress(dhcpInfo.ipAddress);

} else {

    Runnable IpRunnable = new Runnable() {

        @Override
        public void run() {

            InetAddress addr;
            String localIp = null;

            try {
                addr = InetAddress.getLocalHost();
                localIp = addr.getHostAddress();
            } catch (UnknownHostException e) {
            }
        }
    };

    Thread payThread = new Thread(IpRunnable);
    payThread.start();
}
0
zhangligao 5 Сен 2016 в 20:49

3 ответа

Лучший ответ

Попробуй это

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 (Exception ex) {
          Log.e("IP Address", ex.toString());
      }
      return null;
}

Источник https://stackoverflow.com/a/11432695/5284441

0
Community 23 Май 2017 в 12:00

Просто используйте Volley, чтобы получить IP-адрес этого сайта

 RequestQueue queue = Volley.newRequestQueue(this);

    String urlip = "http://checkip.amazonaws.com/";

    StringRequest stringRequest = new StringRequest(Request.Method.GET, urlip, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            txtIP.setText(response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            txtIP.setText("didnt work");
        }
    });

    queue.add(stringRequest);
-1
Sohel Mahmud 14 Авг 2018 в 11:59

Вы не можете получить общедоступный IP-адрес через примененный api android. метод - отправить запрос на какой-то веб-сайт, который ответит на информацию о вашем общедоступном IP-адресе, а затем проанализирует результат, чтобы получить общедоступный IP-адрес.

0
zhangligao 29 Дек 2016 в 02:58