Android 12支付终端DHCP/静态IP检测方案求助(已试SO方案无效)
Android 12支付终端IP配置类型检测方案
权限配置
在AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
核心实现代码
1. 检测Wi-Fi网络IP配置类型
fun getWifiIpConfigType(context: Context): String { val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager val wifiInfo = wifiManager.connectionInfo // 未连接Wi-Fi时返回提示 if (wifiInfo.networkId == -1) return "未连接Wi-Fi" val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val network = connectivityManager.getNetworkForWifiInfo(wifiInfo) ?: return "未知" val linkProperties = connectivityManager.getLinkProperties(network) ?: return "未知" // 判断是否为静态IP配置(API 31+支持) return if (linkProperties.isStaticIpConfiguration) "STATIC" else "DHCP" }
2. 检测以太网网络IP配置类型
fun getEthernetIpConfigType(context: Context): String { val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networks = connectivityManager.allNetworks for (network in networks) { val capabilities = connectivityManager.getNetworkCapabilities(network) if (capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { val linkProperties = connectivityManager.getLinkProperties(network) ?: return "未知" return if (linkProperties.isStaticIpConfiguration) "STATIC" else "DHCP" } } return "未连接以太网" }
3. 获取当前活跃网络的配置类型
fun getCurrentIpConfigType(context: Context): String { val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val activeNetwork = connectivityManager.activeNetwork ?: return "无网络连接" val capabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return "未知" return when { capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> getWifiIpConfigType(context) capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> getEthernetIpConfigType(context) else -> "不支持的网络类型" } }
适配说明
- 该方案基于Android 12(API 31)官方API实现,适配Wi-Fi和以太网两种网络类型;
- 若终端定制ROM不支持
linkProperties.isStaticIpConfiguration,可替换为对比逻辑:- Wi-Fi场景:通过
wifiManager.dhcpInfo获取DHCP分配IP,与wifiInfo.ipAddress对比,不一致则为静态配置; - 以太网场景:通过
linkProperties.dhcpServerAddress判断,若为空则大概率为静态配置;
- Wi-Fi场景:通过
- 需针对支付终端的定制系统实际测试,部分厂商可能修改了网络配置的API逻辑。
内容的提问来源于stack exchange,提问作者Johan Ekberg
相关产品推荐
相关产品推荐

