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

如何在Android设备中获取FQDN?对应可用API是什么?

Android 中使用 FQDN 及获取本地域名的方案

获取设备 FQDN

Android 没有直接返回完整 FQDN 的系统 API,你可以通过组合主机名与本地域名的方式自行构建:

  • 获取主机名:
    • 使用 InetAddress.getLocalHost().getHostName(),但部分定制设备可能返回 localhost 或设备型号这类非预期值;
    • 也可读取系统文件 /proc/sys/kernel/hostname(需文件读取权限),这个来源的主机名通常更准确;
    • 系统属性 Build.HOST 也能获取主机名,但部分设备可能为空。

获取本地域名(对应 Windows 的 GetComputerNameExW(ComputerNameDnsDomain))

Android 没有完全对等的 API,但可以通过以下两种方式获取本地网络域名:

  1. 从 DHCP 配置中读取
    利用 WifiManager 获取 DHCP 分配的域名信息,示例代码:

    WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
    // 部分系统中,DhcpInfo 的 domainName 字段可通过反射获取
    try {
        Field domainField = DhcpInfo.class.getField("domainName");
        String localDomain = (String) domainField.get(dhcpInfo);
    } catch (NoSuchFieldException | IllegalAccessException e) {
        e.printStackTrace();
    }
    

    也可以读取系统 DNS 配置文件 /system/etc/resolv.conf,从中提取域名(需读取权限)。

  2. 通过反向解析获取
    利用 InetAddress 的反向解析功能,从完整主机名中拆分域名:

    try {
        InetAddress localAddr = InetAddress.getLocalHost();
        String fullFqdn = localAddr.getCanonicalHostName();
        if (fullFqdn.contains(".")) {
            String localDomain = fullFqdn.substring(fullFqdn.indexOf(".") + 1);
            // 这里的 localDomain 就是本地网络域名
        }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    

    注意:这种方式依赖本地 DNS 服务器的配置,可靠性不如 DHCP 方式。

设备间通过 FQDN 通信

如果是局域网内设备通信,推荐使用 Android 6.0+ 支持的 mDNS(多播 DNS),通过 NsdManager 实现服务发现:

  • 注册服务时,将设备主机名 + .local 作为 FQDN;
  • 其他设备通过 NsdManager 搜索服务,即可直接通过该 FQDN 访问目标设备,无需手动解析 IP。

内容的提问来源于stack exchange,提问作者Veer Dutta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:42:17