【发布时间】:2021-07-19 16:31:54
【问题描述】:
我想获取网络状态是指连接的网络在 Jetpack Compose 中是否有互联网连接。 如何实现它
【问题讨论】:
-
Jetpack Compose 通常关注 UI 问题。确定网络的状态与 UI 没有直接关系。
标签: android android-jetpack-compose
我想获取网络状态是指连接的网络在 Jetpack Compose 中是否有互联网连接。 如何实现它
【问题讨论】:
标签: android android-jetpack-compose
val connectivityManager
= getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetworkInfo = connectivityManager.getActiveNetworkInfo()
Text(
if(
activeNetworkInfo != null && activeNetworkInfo.isConnected()
) "Connected"
else "Disconnected"
)
这是一个显示网络状态的 Composable。正如上面评论中正确指出的那样,JC 更多地关注 UI,所以所有其他的东西仍然是旧的 Android 方式。 JC 只是简化(?)GUI 开发
【讨论】:
如果您在 connectivityManager.activeNetworkInfo 被弃用时遇到问题,请尝试使用:
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
}
我从另一个问题的已接受答案中得到了答案。 欢迎随时查看:activeNetworkInfo is Deprecated
使用 JC 时,使用它来访问上下文:
val context = LocalContext.current
【讨论】: