获取公网IP和局域网IP

获取公网IP和局域网IP

获取公网IP需要进行网络请求,所以我这里使用线程进行访问,不然在主线程去修改UI会报错

公网IP:

private Handler handler =null;//先定义一个Handler


handler =new Handler();

new Thread(new Runnable(){

@Override

    public void run() {

handler.post(runnableUi);

    }

}).start();


Runnable runnableUi = new Runnable() {
        @Override
        public void run() {
            URL infoUrl = null;
            InputStream inStream = null;
            String ipLine = "";
            HttpURLConnection httpConnection = null;
            try {
                infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8");
                URLConnection connection = infoUrl.openConnection();
                httpConnection = (HttpURLConnection) connection;
                int responseCode = httpConnection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    inStream = httpConnection.getInputStream();
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(inStream, "utf-8"));
                    StringBuilder strber = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null){
                        strber.append(line + "\n");
                    }
                    Pattern pattern = Pattern
                            .compile("((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))");
                    Matcher matcher = pattern.matcher(strber.toString());
                    if (matcher.find()) {
                        ipLine = matcher.group();
                    }
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    inStream.close();
                    httpConnection.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            String aaaa=ipLine;
            gw.setText("公网IP:" + ipLine);
        }
    };

局域网IP

public static String getIPAddress(Context context) {
            NetworkInfo info = ((ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
            if (info != null && info.isConnected()) {
                  if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//当前使用2G/3G/4G网络
                        try {
                              //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();
                              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) {
                              e.printStackTrace();
                        }


                  } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//当前使用无线网络
                        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                        String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址
                        return ipAddress;
                  }
            } else {
                  //当前无网络连接,请在设置中打开网络
            }
            return null;
      }

实测有效,小米获取公网IP还有点问题,华为没问题

喜欢的点一个关注吧,后续会更新这个简书

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 5,288评论 2 54
  • 引言 我先抛出一个简单的问题。 我所在的公司启用的是独立IP地址,公司下的所有电脑都在一个局域网内,然从每台计算机...
    OzanShareing阅读 5,368评论 2 23
  • 作者si1ence2016.05.20 10:24* http://www.jianshu.com/p/bc3f8...
    Kiddz阅读 1,251评论 0 12
  • 我不是怕狗 我只是害怕一切有攻击性的东西 这几天在家呆的实在无聊,刚好表姐回来了,便想着去找她玩,我小时候被鸡...
    苏子应阅读 488评论 2 2
  • 文/邓琪 前些日子带上了红泥小火炉和茶具到寺庙山中去远足,取了清冽的泉水烧开沏茶浅酌,禅音缈缈,山顶的湖水干涸,只...
    晴满阅读 335评论 0 2