package com.sw.platecabinet.utils import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities import com.sw.platecabinet.ENVIRONMENTS import java.net.Inet4Address import java.net.InetAddress import java.net.NetworkInterface /** * 网络状态只读提供器:连通性、本机 IP、业务环境名。 */ object NetStatusProvider { /** 连通性摘要(离线/WiFi/蜂窝/以太网/未知) */ fun connectivitySummary(context: Context): String { val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager ?: return "未知" val network = cm.activeNetwork ?: return "离线" val caps = cm.getNetworkCapabilities(network) ?: return "离线" return when { !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) -> "离线(无外网)" caps.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> "以太网" caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> "WiFi" caps.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> "蜂窝" else -> "已连接" } } /** 本机 IPv4 地址(取首个非回环地址,无则返回"未知") */ fun localIpv4(): String { return try { val addresses = mutableListOf() val interfaces = NetworkInterface.getNetworkInterfaces() ?: return "未知" for (nif in interfaces) { val addrs = nif.inetAddresses ?: continue for (addr in addrs) addresses.add(addr) } addresses.firstOrNull { it is Inet4Address && !it.isLoopbackAddress }?.hostAddress ?: "未知" } catch (e: Exception) { "未知" } } /** 由 baseUrl 反查预设环境名,未匹配返回"自定义" */ fun envName(baseUrl: String): String { return ENVIRONMENTS.firstOrNull { it.url == baseUrl }?.name ?: "自定义" } }