簡體   English   中英

使用 Jetpack 組合的網絡狀態

[英]Network State with Jetpack compose

我想獲取網絡狀態意味着連接的網絡在 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

使用 JC 時,使用它來訪問上下文:

val context = LocalContext.current

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM