我正在使用 NSD(网络服务发现)NsdManager.DiscoveryListener 来发现网络上的服务。但是,在 onServiceFound 方法中,我有时无法从 NsdServiceInfo 对象中检索 IP 地址。尽管查阅了官方文档并遵循了最佳实践,但是,即使有 MAC 地址,我仍然遇到无法检索 IP 地址的情况。我正在运行 Android 版本 13 的 Pixel 6 设备上对此进行测试。
我参考了以下链接: https://developer.android.com/training/connect-devices-wirelessly/nsd#discover.
代码:
private val discoveryListener = object : NsdManager.DiscoveryListener {
override fun onDiscoveryStarted(regType: String) {
Log.d(TAG, "Service discovery started")
}
override fun onServiceFound(service: NsdServiceInfo) {
Log.d(TAG, "Service discovery success$service")
// However, I am still encountering situations where the IP address cannot be retrieved, even though the MAC address is available.
}
override fun onServiceLost(service: NsdServiceInfo) {
Log.e(TAG, "service lost: $service")
}
override fun onDiscoveryStopped(serviceType: String) {
Log.i(TAG, "Discovery stopped: $serviceType")
}
override fun onStartDiscoveryFailed(serviceType: String, errorCode: Int) {
nsdManager.stopServiceDiscovery(this)
}
override fun onStopDiscoveryFailed(serviceType: String, errorCode: Int) {
nsdManager.stopServiceDiscovery(this)
}
}
连接代码:
private val resolveListener = object : NsdManager.ResolveListener {
override fun onResolveFailed(serviceInfo: NsdServiceInfo, errorCode: Int) {
// Called when the resolve fails. Use the error code to debug.
Log.e(TAG, "Resolve failed: $errorCode")
}
override fun onServiceResolved(serviceInfo: NsdServiceInfo) {
Log.e(TAG, "Resolve Succeeded. $serviceInfo")
if (serviceInfo.serviceName == mServiceName) {
Log.d(TAG, "Same IP.")
return
}
mService = serviceInfo
val port: Int = serviceInfo.port
val host: InetAddress = serviceInfo.host
}
}