如何在Android设备中获取FQDN?对应可用API是什么?
Android 中使用 FQDN 及获取本地域名的方案
获取设备 FQDN
Android 没有直接返回完整 FQDN 的系统 API,你可以通过组合主机名与本地域名的方式自行构建:
- 获取主机名:
- 使用
InetAddress.getLocalHost().getHostName(),但部分定制设备可能返回localhost或设备型号这类非预期值; - 也可读取系统文件
/proc/sys/kernel/hostname(需文件读取权限),这个来源的主机名通常更准确; - 系统属性
Build.HOST也能获取主机名,但部分设备可能为空。
- 使用
获取本地域名(对应 Windows 的 GetComputerNameExW(ComputerNameDnsDomain))
Android 没有完全对等的 API,但可以通过以下两种方式获取本地网络域名:
从 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,从中提取域名(需读取权限)。通过反向解析获取
利用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
相关产品推荐
相关产品推荐

