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

举报
程思扬 发表于 2022/01/14 00:23:03 2022/01/14
【摘要】   今天有个朋友要获取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怎么获取呢?

话不多说直接上代码。


  
  1. public class MainActivity extends Activity {
  2. private TextView tv;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. tv = (TextView) findViewById(R.id.tv);
  8. new Thread(new Runnable() {
  9. @Override
  10. public void run() {
  11. URL infoUrl = null;
  12. InputStream inStream = null;
  13. String line = "";
  14. try {
  15. infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8");
  16. URLConnection connection = infoUrl.openConnection();
  17. HttpURLConnection httpConnection = (HttpURLConnection) connection;
  18. int responseCode = httpConnection.getResponseCode();
  19. if (responseCode == HttpURLConnection.HTTP_OK) {
  20. inStream = httpConnection.getInputStream();
  21. BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8"));
  22. StringBuilder strber = new StringBuilder();
  23. while ((line = reader.readLine()) != null)
  24. strber.append(line + "\n");
  25. inStream.close();
  26. // 从反馈的结果中提取出IP地址
  27. int start = strber.indexOf("{");
  28. int end = strber.indexOf("}");
  29. String json = strber.substring(start, end + 1);
  30. if (json != null) {
  31. try {
  32. JSONObject jsonObject = new JSONObject(json);
  33. line = jsonObject.optString("cip");
  34. } catch (JSONException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. tv.setText("ip===="+line);
  39. }
  40. } catch (MalformedURLException e) {
  41. e.printStackTrace();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. tv.setText("ip===="+line);
  46. }
  47. }).start();
  48. }
  49. }

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

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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