Android检查kotlin中的互联网连接
我需要检查设备是否连接了internet,我搜索了一些示例,但当我复制和粘贴代码时,总是会出现错误或不推荐使用的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要在viewModel中检查internet连接以发出一些请求,而我找到的所有方法在参数中都有上下文,我无法在viewModel中获取上下文 我尝试了这个代码,但我不明白我必须把它放在哪里,我得到了什么Android检查kotlin中的互联网连接,android,kotlin,Android,Kotlin,我需要检查设备是否连接了internet,我搜索了一些示例,但当我复制和粘贴代码时,总是会出现错误或不推荐使用的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要在viewModel中检查internet连接以发出一些请求,而我找到的所有方法在参数中都有上下文,我无法在viewModel中获取上下文 我尝试了这个代码,但我不明白我必须把它放在哪里,我得到了什么 “TYPE\u WIFI、TYPE\u MOBILE、TYPE\u ETHERNET:Int”不推荐使用。在Java中已弃用 p
“TYPE\u WIFI、TYPE\u MOBILE、TYPE\u ETHERNET:Int”不推荐使用。在Java中已弃用
private fun isInternetAvailable(context: Context): Boolean {
var result = false
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val networkCapabilities = connectivityManager.activeNetwork ?: return false
val actNw =
connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
result = when {
actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
else -> false
}
} else {
connectivityManager.run {
connectivityManager.activeNetworkInfo?.run {
result = when (type) {
ConnectivityManager.TYPE_WIFI -> true
ConnectivityManager.TYPE_MOBILE -> true
ConnectivityManager.TYPE_ETHERNET -> true
else -> false
}
}
}
}
return result
}
有人能告诉我怎么做这个检查吗?我创建了一个助手类。
Network.kt
object Network {
private const val NETWORK_STATUS_NOT_CONNECTED = 0
private const val NETWORK_STATUS_WIFI = 1
private const val NETWORK_STATUS_MOBILE = 2
private const val TYPE_WIFI = 1
private const val TYPE_MOBILE = 2
private const val TYPE_NOT_CONNECTED = 0
private fun connectivityStatus(context: Context): Int {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork = connectivityManager.activeNetworkInfo
if (null != activeNetwork) {
if (activeNetwork.type == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI
if (activeNetwork.type == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE
}
return TYPE_NOT_CONNECTED
}
private fun connectivityStatusString(context: Context): Int {
val connection = connectivityStatus(context)
var status = -1
if (connection == TYPE_WIFI) status = NETWORK_STATUS_WIFI else if (connection == TYPE_MOBILE) status = NETWORK_STATUS_MOBILE else if (connection == TYPE_NOT_CONNECTED) status = NETWORK_STATUS_NOT_CONNECTED
return status
}
fun checkConnectivity(context : Context):Boolean{
val status = connectivityStatusString(context)
return status == NETWORK_STATUS_WIFI || status == NETWORK_STATUS_MOBILE
}
}
要访问它,你需要像这样使用它
if (Network.checkConnectivity(this@MainActivity))
\\Internet is working
else
\\No internet connectivity
我创建了一个助手类。
Network.kt
object Network {
private const val NETWORK_STATUS_NOT_CONNECTED = 0
private const val NETWORK_STATUS_WIFI = 1
private const val NETWORK_STATUS_MOBILE = 2
private const val TYPE_WIFI = 1
private const val TYPE_MOBILE = 2
private const val TYPE_NOT_CONNECTED = 0
private fun connectivityStatus(context: Context): Int {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork = connectivityManager.activeNetworkInfo
if (null != activeNetwork) {
if (activeNetwork.type == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI
if (activeNetwork.type == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE
}
return TYPE_NOT_CONNECTED
}
private fun connectivityStatusString(context: Context): Int {
val connection = connectivityStatus(context)
var status = -1
if (connection == TYPE_WIFI) status = NETWORK_STATUS_WIFI else if (connection == TYPE_MOBILE) status = NETWORK_STATUS_MOBILE else if (connection == TYPE_NOT_CONNECTED) status = NETWORK_STATUS_NOT_CONNECTED
return status
}
fun checkConnectivity(context : Context):Boolean{
val status = connectivityStatusString(context)
return status == NETWORK_STATUS_WIFI || status == NETWORK_STATUS_MOBILE
}
}
要访问它,你需要像这样使用它
if (Network.checkConnectivity(this@MainActivity))
\\Internet is working
else
\\No internet connectivity
您必须扩展AndroidViewModel()类。之后,您可以在viewModel中访问应用程序上下文
类viewModel(app:Application):AndroidViewModel(app){}您必须扩展AndroidViewModel()类。之后,您可以在viewModel中访问应用程序上下文
class viewModel(app:Application):AndroidViewModel(app){}我建议阅读相关文档页面:我建议阅读相关文档页面:IDE在
@MainActivity
中显示错误,在if(Network.checkConnectivity)中(this@MainActivity))
您可以像(网络)一样使用它。检查连接(此))或者用您当前的活动名称替换MainActivity。但是我在viewModel中使用它,并且包含片段的活动是MainActivity,但是IDE显示此错误该函数需要上下文。将上下文传递给它,错误就会消失。这有什么关系。这仅显示是否存在wifi或移动连接。如果他们在if(Network.checkConnectivity)中的@MainActivity
上显示错误,则不会显示(this@MainActivity))
您可以像(Network.checkConnectivity(this))一样使用它,也可以用当前的活动名称替换MainActivity。但是我在viewModel中使用它,包含该片段的活动是MainActivity,但IDE向我显示此错误该函数需要上下文。将上下文传递给它,错误就会消失。这有什么关系。这仅显示是否存在wifi或移动连接。如果他们有互联网就不会。