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

Android Kiosk设备动态访问同网段固定IP后缀URL的实现问询

动态获取网段并拼接目标URL的Android实现方案

核心思路

通过获取设备当前活跃网络的IPv4地址,提取前三个网段段,拼接固定后缀.245生成目标URL,实现不同网络环境下自动适配,无需静态配置IP。

具体实现步骤

1. 申请必要权限

在AndroidManifest.xml中添加网络权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

Android 6.0及以上版本需动态申请ACCESS_NETWORK_STATE权限。

2. 获取当前设备IPv4地址

遍历设备网络接口,筛选出活跃的非回环IPv4地址:

fun getCurrentDeviceIp(): String? {
    val interfaces = Collections.list(NetworkInterface.getNetworkInterfaces())
    for (intf in interfaces) {
        val addrs = Collections.list(intf.inetAddresses)
        for (addr in addrs) {
            if (!addr.isLoopbackAddress && addr is Inet4Address) {
                return addr.hostAddress
            }
        }
    }
    return null
}

3. 拼接目标URL

提取IP地址的前三个网段,拼接固定后缀生成目标URL:

fun buildTargetUrl(deviceIp: String?): String? {
    deviceIp ?: return null
    val ipSegments = deviceIp.split(".")
    if (ipSegments.size != 4) return null
    val networkPrefix = ipSegments.take(3).joinToString(".")
    return "http://$networkPrefix.245"
}

4. 加载目标URL

根据需求选择嵌入WebView或打开系统浏览器:

  • 嵌入WebView(适合kiosk模式,避免跳转第三方应用):
webView.settings.javaScriptEnabled = true
val targetUrl = buildTargetUrl(getCurrentDeviceIp())
targetUrl?.let { webView.loadUrl(it) }
  • 打开系统浏览器:
val targetUrl = buildTargetUrl(getCurrentDeviceIp())
targetUrl?.let {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(it))
    startActivity(intent)
}

5. 监听网络变化

为适配网络切换场景,注册网络回调监听网络状态变化,自动更新URL:

val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        val newUrl = buildTargetUrl(getCurrentDeviceIp())
        newUrl?.let {
            runOnUiThread {
                webView.loadUrl(it)
            }
        }
    }
}
connectivityManager.registerNetworkCallback(
    NetworkRequest.Builder().build(),
    networkCallback
)

注意事项

  • 处理IP获取失败的场景(如无网络连接),需给用户明确提示
  • 确保kiosk模式下应用拥有后台运行、锁屏保活等权限,避免网络切换时无法触发更新
  • 测试多网段环境,验证IP提取和URL拼接逻辑的正确性

内容的提问来源于stack exchange,提问作者Matteo Sessa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:20:10