Android获取手机WiFi IP地址,MAC地址和网关地址程序实例

现在博主在上大三,正在学习一些计算机网络的一些概念,知道了局域网ip和网关ip不同的概念,当时还纳了闷了2的32次方好像不咋够用啊,原来是这个样子。

由于之前学过一段时间的Android,同时又在上Android开发的个性课,于是就自然萌发出了一个自己通过编写Android程序获取ip相关信息的小程序。

手机在连入局域网的WiFi的时候,会自动获取IP地址信息到本机,然后可以通过“设置→系统→关于手机→状态信息→IP地址”查看当前的IP地址,得到的应该是IPv6的,不过下方的如“192.168.1.102”就是对应的IPv4的地址,而如果通过4G流量上网的话,那么得到的直接就是IPv4的。

而网关ip也可以说是外网ip则需要与互联网有过信息交流后才能知道,所以要通过一次网络连接才可以,而不少网站(诸如:http://city.ip138.com/city0.asphttp://ip.taobao.com/service/getIpInfo2.php?ip=myip)也提供了查询本机网关ip的服务,只要直接从浏览器输入地址即可得到相关信息。

然而博主要说的是这是诸如2011年、2014年那时候的说法,在目前的实践中已经不太可行了,就比如ip138那个,键入后其实会被链接到http://1212.ip138.com/ic.asp,故当前的话应该将查询网址设为1212的,至于淘宝的那个,如果用电脑浏览器打开的话, 是可以获取到信息的,并且还很详细,可是如果用手机(博主用的是UC浏览器,Android),会出现一个下载php文件的提示,浏览器无法直接解析php文件,所以这种方法也是不可行的,同时博主自己也实际测试了一下发现确实不可以,至少目前我的不可以(Android5.1 华为)。

于是在网上查找并参考了相关资料之后,思路也就基本有了。说实话,现在的网络真的实在是太便捷,真的是很大的一个助手,各种博客论坛开源项目git的存在,程序员的日子已经相对而言很好了。

然而在代码初次编写后发现程序可以获取本机IP、MAC地址,这很容易,直接获取就是了,然而网关IP的获取则崩溃了。

后来发现这个网络操作应该放在子线程来进行,应该通过回调来通知主线程更新UI。
然而修改完成后发现还是无法成功,最后发现是他喵的没有申请android.permission.INTERNET权限。

然而功夫不负有心人,最终还是完成了,嘻嘻。

起初我是想把获取IP信息放在一个类里面通过提供一些方法来实现模块的复用和松耦合,最后发现在网关IP这里失败了,由于要进行异步操作,更新UI操作,无法实现代码独立。
所以最终做成了这个样子:


这里是主Activity代码

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public 
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值