当前位置:首页 > 智能硬件 > 人工智能AI
[导读] 如今开发的app没有不用到网络的,所以对当前网络状态的准确把控就尤为重要了。经常有这样的场景:获取手机当前网络类型、是否连接Wi-Fi、是否能够访问外网(英特网)。今天我们要说的就是如何判断手机

如今开发的app没有不用到网络的,所以对当前网络状态的准确把控就尤为重要了。经常有这样的场景:获取手机当前网络类型、是否连接Wi-Fi、是否能够访问外网(英特网)。今天我们要说的就是如何判断手机是否能够与服务器通信。

Note: 本文所有代码均是基于kotlin语言实现

1.错误方法

在写代码前,先在网上搜索了主流的解决方案,发现大家都是前篇一律的思路:使用NetworkInfo中的一个状态(State)是否是连接状态来判断,但是结果是残酷的,该方法是用来判断是否连接了Wi-Fi,并不能表示手机连接了互联网。不过我也把代码贴出来,供大家参考:

2.正确方法

权限:

<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

方案一:ping服务器地址(简单)

通过ping命令的返回结果来得知是否连接外网,现在主流有效的方法均是这个原理,只是大部分都是ping的百度的地址,这里推荐使用8.8.8.8,示例代码如下:

PS:8.8.8.8是一个dns服务器地址,是Google提供的免费DNS服务器的IP地址。
这个方案的优点是:

可以运行在主线程,且是同步的

速度快

缺点也有:

在一些老的手机上并不起效,比如Galaxy S3,原因是跟手机的OEM有关,具体原因可以参考:Why does ping works on some devices and not others?

方案二:连接服务器端口(推荐)

使用socket连接服务器的一个端口,并通过连接的结果来判断手机是否连接外网,推荐使用该方法,因为该方法适用于所有的手机Android版本,示例代码如下:

funisOnline() =try{valTImeoutMs =1500Socket().use{//连接的端口不同,网络协议不同。 DNS:53;HTTP:80valsocketAddr = InetSocketAddress("8.8.8.8",53) it.connect(socketAddr, TImeoutMs) }true} catch (e: Throwable) {false}

优点:

速度快,非常快

方法通吃,没有烦人的版本适配

缺点:

不能在主线程中运行

方案三:根据域名获取IP(推荐)

使用InetAddress提供的方法getByName()获取某个域名的IP地址,然后根据是否获取的成功来判断是否连接外网。推荐使用该方法。

优点:

速度快,超时可自定义

可运行在主线程

各个版本通吃

缺点:

暂无

3.总结

其实以上有效的三个方案的思路都是一样的:

进行一次网络访问(必须访问公网的一个地址,无论是域名或者IP地址)

根据网络返回的结果进行实际判断

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2024年4月17日 /美通社/ -- 2024年4月13日,由北京康盟慈善基金会主办的"县域诊疗,规范同行"——肿瘤诊疗学术巡讲项目首站在广州隆重召开。本次会议邀请全国多位肺癌领域专家和县域同道...

关键字: AI技术 医疗服务 BSP 互联网

机器人技术将与移动互联网、物联网、大数据、云计算、人工智能等新一代数字技术进一步融合,特别是5G技术将使工业机器人成为工业智能制造体系的一部分,通过实时传输数据提高效率。

关键字: 机器人 医疗机器人 互联网

在这个互联网时代我们的数据越来越多但也越来越透明,想不明白自己的手机号和姓名是怎么泄露的,每天都会有各种广告推销打给自己,也曾听说谁谁谁的照片不知道为何被外泄讨论。数据存储和安全管理已经成为企业运营和个人生活中不可或缺的...

关键字: 铁威马 互联网 nas网络存储

SAP(思爱普)近日发出的裁员计划,不仅涉及全球范围内约8000个职位,更是在中国区造成了近1500名正式员工和合同工不续的情况。

关键字: 软件 互联网

最近总是出现iPhone16和ipad的概念新闻,以前为了跟风也会更换手机,后来是因为职业原因拍摄大量视频照片占据手机空间而不得已换了一部又一部手机。但慢慢地我发现,想要查找几年前的视频总得翻找之前的手机,流程繁杂又拖沓...

关键字: NAS 互联网 存储

近日,国内领先的在线旅行服务平台去哪儿宣布完成鸿蒙原生应用Beta版本开发,成为旅行行业中首批完成Beta版开发的应用之一,该版本已经实现了机票预订、支付、服务等功能,将为用户提供更为便捷、智能的旅行体验。这不仅为旅行行...

关键字: 鸿蒙 互联网 智慧旅行

随着科技的飞速发展,我们日常生活的方方面面都在逐渐被智能化、网络化所渗透。物联网(Internet of Things, IoT)作为一项将传统物品与互联网相结合的技术,正在引领着一个全新的技术革命。从家用电器到工业制造...

关键字: 物联网 互联网 IoT

3月12日是万维网(World Wide Web,互联网)创建35周年的日子,让我们来了解一下万维网发明者蒂姆·伯纳斯-李(Tim Berners-Lee)对网络和未来发展三点预测。

关键字: 互联网 伯纳斯李 AI助理 AI

罗德与施瓦茨与SmartViser携手开发了一种用于测试符合欧盟销售的智能手机和平板电脑的新Energy Efficiency Index(EEI)标签法规的解决方案。该解决方案的核心是R&S CMX500,这是...

关键字: 智能手机 Android iOS

随着互联网的迅猛发展,百度、阿里巴巴、腾讯等互联网巨头逐渐崭露头角,成为了行业的领军者。这些公司在云计算、大数据、人工智能等领域积累了丰富的经验和技术实力,为开发者提供了丰富的服务和工具。在这样的背景下,BAT模块应运而...

关键字: 互联网 云计算 大数据
关闭
关闭