前言:原文中先是写定义了一个class类,之后使用了我之前博客中提到的companion object (kotlin中的关键字)把判断网络连接的几个方法做成了类似于java的静态方法即可以使用类名.方法名直接调用。可以直接使用 object 关键 来定义一个类使其变成一个单例类。 而且在方法中使用kotlin的 ?. 和 ?: 来简化程序的写法。
import android.content.Context
import android.net.ConnectivityManager
object NetWorkUtils {
//判断网络状态,有网络返回true
fun isConnected(context: Context?): Boolean {
return isNetworkConnected(context) || isWifiConnected(context)
}
//判断手机是否有网络连接
fun isNetworkConnected(context: Context?): Boolean {
return context?.let {
val mConnectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
mConnectivityManager.activeNetworkInfo?.isAvailable
} ?: false
}
//判断wifi网络是否可用
fun isWifiConnected(context: Context?): Boolean {
return context?.let {
val mConnectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)?.isAvailable
} ?: false
}
}
kotlin中的?. 和?:是常用得判空的语法糖
// kotlin
context?.let{ } 和 ?:
// java
public final boolean isWifiConnected(@Nullable Context context) {
boolean var10;
if (context != null) {
boolean var3 = false;
boolean var4 = false;
int var6 = false;
Object var10000 = context.getSystemService("connectivity");
if (var10000 == null) {
throw new NullPointerException("null cannot be cast to non-null type android.net.ConnectivityManager");
}
ConnectivityManager mConnectivityManager = (ConnectivityManager)var10000;
NetworkInfo var8 = mConnectivityManager.getNetworkInfo(1);
Boolean var9 = var8 != null ? var8.isAvailable() : null;
if (var9 != null) {
var10 = var9;
return var10;
}
}
var10 = false;
return var10;
}
解释:
1、context ?.let{} 相当于 if (context != null) { } 只有?前面的不为空才会去执行let{}里面的代码。
2、?: 相当于java中的三目运算符,从反编译出来的代码即可看出来:
Boolean var9 = var8 != null ? var8.isAvailable() : null;
注:android studio 中的kotlin反编译成java的方法如下图:



