使用 Jetpack 撰写的网络状态

6 android android-jetpack-compose

我想获取网络状态意味着连接的网络是否在 Jetpack Compose 中具有互联网连接。如何实现

Jam*_*jon 6

如果您遇到了被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
}
Run Code Online (Sandbox Code Playgroud)

我从另一个问题的已接受答案中得到了答案。请随意查看:activeNetworkInfo 已弃用

使用 JC 时,使用它来访问上下文:

val context = LocalContext.current
Run Code Online (Sandbox Code Playgroud)


Ric*_*per 1

val connectivityManager 
            = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val activeNetworkInfo = connectivityManager.getActiveNetworkInfo()

     Text(
if(
activeNetworkInfo != null && activeNetworkInfo.isConnected()
) "Connected"
else "Disconnected" 
)
Run Code Online (Sandbox Code Playgroud)

这是一个显示网络状态的可组合项。正如上面评论中正确指出的那样,JC 更关注 UI,因此所有其余的东西仍然是相同的旧 Android 方式。JC 只是提高了(?)GUI 开发的效率