Android笔记:Android设备获取公网IP

举报
程思扬 发表于 2022/01/14 00:23:03 2022/01/14
2.9k+ 0 0
【摘要】   今天有个朋友要获取Android手机当前连入网络的ip,问我怎么做,我一想这还不简单。告诉他先判断是什么网络环境,如果是WiFi可以通过WifiManager获取到,如果是流量(2G、3G或者4G网)就通过NetworkInterface遍历获取getHostAddress()获得,但是他们要求获取不是路由器发出的局域网i...

  今天有个朋友要获取Android手机当前连入网络的ip,问我怎么做,我一想这还不简单。告诉他先判断是什么网络环境,如果是WiFi可以通过WifiManager获取到,如果是流量(2G、3G或者4G网)就通过NetworkInterface遍历获取getHostAddress()获得,但是他们要求获取不是路由器发出的局域网ip,而是当前的外网ip,一般我们手机连接路由器,路由器分给我们的ip都是路由器转发的C网段的局域网ip,也就是192.168.x.xx  这样的网段,但是我们想要的真实的外网ip怎么获取呢?

话不多说直接上代码。


      public class MainActivity extends Activity {
         private TextView tv;
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              tv = (TextView) findViewById(R.id.tv);
             new Thread(new Runnable() {
                 @Override
                 public void run() {
                     URL infoUrl = null;
                     InputStream inStream = null;
                     String line = "";
                     try {
                          infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8");
                         URLConnection connection = infoUrl.openConnection();
                         HttpURLConnection 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();
                             while ((line = reader.readLine()) != null)
                                  strber.append(line + "\n");
                              inStream.close();
                             // 从反馈的结果中提取出IP地址
                             int start = strber.indexOf("{");
                             int end = strber.indexOf("}");
                             String json = strber.substring(start, end + 1);
                             if (json != null) {
                                 try {
                                     JSONObject jsonObject = new JSONObject(json);
                                      line = jsonObject.optString("cip");
                                  } catch (JSONException e) {
                                      e.printStackTrace();
                                  }
                              }
                              tv.setText("ip===="+line);
                          }
                      } catch (MalformedURLException e) {
                          e.printStackTrace();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                      tv.setText("ip===="+line);
                  }
              }).start();
          }
      }
  
 

这就是方法了,大家可再根据自己的实际需要,进行修改。

文章来源: chengsy.blog.csdn.net,作者:程思扬,版权归原作者所有,如需转载,请联系作者。

原文链接:chengsy.blog.csdn.net/article/details/82115268

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。