有个需求,需要判断网络是否连接,如果是正常的移动网络或者 WiFi,是可以判断出来的,但是目标设备使用的是以太网,就像台式机插入的网线一样。假设拔掉机器这边的网线,很显然就是没有网络的,通过 Android 的 ConnectivityManager 的 getActiveNetworkInfo 也可以判断出来。但如果拔掉的是网线的另一端,通过 Android SDK 获取的网络会仍然是 CONNECTED。这显然是有问题的,因为此时此刻设备连访问百度的能力都没有了。所以打算使用 ping 指令,不断的去 ping 一个 host,如果能正常返回,则说明网络是没问题的。
代码很简单,就一个方法:
1 | /** |
核心思路就是每隔一秒钟 ping 一次,如果在 5 秒内返回了结果,则认为网络连接正常,否则就是未连接。结合 Kotlin 协程的一些方法,让代码写起来简单直接,也算是学习一把协程。