You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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判断,若为空则大概率为静态配置;
  • 需针对支付终端的定制系统实际测试,部分厂商可能修改了网络配置的API逻辑。

内容的提问来源于stack exchange,提问作者Johan Ekberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:56:09