我想为 Android 内置ConnectivityManager类创建一个扩展函数,以便我的项目中的任何类都可以静态使用它。我只使用 Kotlin。
fun ConnectivityManager.checkInternet(context: Context): Boolean {
val manager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val connection = manager.activeNetworkInfo
if (connection != null && connection.isConnectedOrConnecting) {
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
我可以通过创建 的对象来访问此函数,ConnectivityManager但我想做的是静态使用它。有什么可能吗?
仅当您的类定义了一个对象时,这才有可能companion:
class MyClass {\n companion object { } \n}\n\nfun MyClass.Companion.foo() {\n}\nRun Code Online (Sandbox Code Playgroud)\n\n就像伴生对象的常规成员一样,可以仅使用类名作为限定符来调用它们:
\n\nMyClass.foo()\nRun Code Online (Sandbox Code Playgroud)\n\n不幸的是,Java 类没有这样的companion对象,这就是为什么你不能\xe2\x80\x99 实现你想要的。
小智 5
这种扩展功能很可能不是您正在寻找的。我可以看到两种处理方法。
创建顶级函数是单独的文件(例如network.kt)。
fun checkInternet(context: Context): Boolean{
// perform check here
}
Run Code Online (Sandbox Code Playgroud)
或者在Context上创建扩展方法
fun Context.checkInternet(): Boolean {
val manager = this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
// I've "kotlinized" a bit your `if` statement
return manager.activeNetworkInfo?.isConnectedOrConnecting ?: false
}
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我更喜欢使用扩展名的方法Context。
| 归档时间: |
|
| 查看次数: |
2454 次 |
| 最近记录: |