首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android笔记:Android设备获取公网IP

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

作者头像
程思扬
发布于 2022-01-10 07:02:15
发布于 2022-01-10 07:02:15
2.1K00
代码可运行
举报
文章被收录于专栏:程思阳的专栏程思阳的专栏
运行总次数:0
代码可运行

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

话不多说直接上代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();

    }

}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AndroidStudio——利用APIStore获取网络新闻
public class HttpJsonActivity extends AppCompatActivity {
用户7886150
2020/12/31
6120
java获取ip和地区 原
String s = HttpUtil.sendPost("http://pv.sohu.com/cityjson"); JSONObject jsonObject = JSONObject.parseObject(s.substring(s.indexOf("{"), s.indexOf("}") + 1)); jsonObject.get("cip"); jsonObject.get("cname"); /** * Gets ip. * * @return the ip */ public s
wuweixiang
2018/10/25
1.4K0
android orm持久层框架
android数据库开发   Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦(主要是我对sql语言不熟悉)。而Java Web开发中有很多orm框架,但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,说实话还有好几个。   实现考虑的是:androrm   官网:http://androrm.the-pixelpla.net/ 说实话,这个我实在没有弄懂,一共两个包。   一个是依赖包:Ap
xiangzhihong
2018/01/30
9200
Android | 网络技术基础梳理——WebView以及HTTP运用、XML以及JSON解析(demo+bug)
当然还要注意一点,如果你的模拟器和SDK是Android 9.0(API级别28),那运行如上代码会出现下面这个问题:
凌川江雪
2019/10/16
3.2K0
Android | 网络技术基础梳理——WebView以及HTTP运用、XML以及JSON解析(demo+bug)
如何将天气预报查询API集成到手机上
随着智能手机的普及,天气预报应用成为了我们日常生活中不可或缺的一部分。本文将指导你如何将天气预报查询API集成到手机上,无论是通过原生应用开发还是跨平台解决方案,都可以实现这一功能。我们将以原生Android应用开发为例,展示集成过程。
用户10428865
2024/04/12
3890
Android的HttpUrlConnection
Android的HttpUrlConnection 项目结构: image.png activity_main.xml: <?xml version="1.0" encoding="utf-8"?>
Dream城堡
2018/12/28
6220
【JavaSE专栏91】Java如何主动发起Http、Https请求?
本文讲解了如何使用 Java 发起 Http 请求,并给出了样例代码,HTTP 是一种用于在 Web 浏览器和 Web 服务器之间传输数据的协议,Java 可以通过三方工具类发起 HTTP 请求。
Designer 小郑
2023/09/01
1.2K0
【JavaSE专栏91】Java如何主动发起Http、Https请求?
简单的安卓网络音乐视频播放器app
学习安卓开发时做的一个小demo,知识点包括:intent、UI、界面切换、API调用、播放器调用、内部存储、list控件等。
小锋学长生活大爆炸
2022/05/09
2.1K0
简单的安卓网络音乐视频播放器app
中英翻译(基于百度翻译)
市面上有名气的翻译公司就是有道和百度了,有道尝试了一下,分为API和SDK两种,但是demo下载下来跑不了
用户3112896
2019/09/26
2.7K0
中英翻译(基于百度翻译)
安卓天气预报app(一)——解析Json数据、数据类封装
不罗嗦那么多没用的;;; 既然是简易的天气app,那么本demo就没有那麽多复杂的交互,页面跳转,只包括了针对api获取和解析数据放到app主页面,由于配置定位服务太繁琐,本次测试没有使用定位功能。 项目只包含一个主要activity_main.xml,两个封装的实体用来存数据 用到的天气api可前往官网注册账号获取:天气api
roydonGuo
2022/11/02
2.1K0
安卓天气预报app(一)——解析Json数据、数据类封装
6.网络编程
tomcat 获取Tomcat安装程序包 tar.gz文件是Linux操作系统下的安装版本 exe文件是Windows系统下的安装版本x86 x64 zip文件是Windows系统下的压缩版本 (建议) Tomcat启动方式 使用Tomcat服务程序(安装版)         使用Tomcat程序组中的快捷菜单(安装版)         使用Tomcat.exe程序(安装版)         使用批处理程序(使用解压版) 双击 bin 目录下的 startup.bat 文件 输入 http://local
六月的雨
2018/05/14
1.1K0
Android学习--持久化(一) 文件存储
持久化之   文件存储        这里把Android持久化全都整理一下,这一篇文章先简单的说一下文件的存储,通过下面一个简单的Demo,理解一下这个文件存储,先说说下面Demo的思路:        1、创建EditText,检查本地是否有存储的文件数据,有的话就直接显示,没有就默认创建        2、EditText输入文字,在这个活动销毁之前存储数据        3、活动启动出现之前读取存储的数据        这样一个简单的存储和读取的整个过程我们就完全体现 Demo效果        
Mr.RisingSun
2018/01/12
9370
Android学习--持久化(一) 文件存储
Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1「建议收藏」
在大学期间我做过非常多类似这种APP。这个是我们小组之前做的,我后期增加非常多新元素。完好了这个应用,由于为了加强
全栈程序员站长
2022/07/07
5320
Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1「建议收藏」
安卓基础干货(四):安卓网络编程的学习
网络HTML查看器 httpurlconnection: 1、发送请求 (1)创建一个URL对象 (2)设置请求头信息 2、服务器返回数据 (1)判断状态码:200 ok,404 没有找到资源、503、509 服务器端错误 (2)解析服务器返回的二进制数据,解析成一个图片 (3)把图片显示在TextView上 示例代码: package com.itheima.htmlview; import java.io.InputStream; import ja
緣來
2018/09/18
15.8K0
相关推荐
AndroidStudio——利用APIStore获取网络新闻
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档