gpt4 book ai didi

android - NsdManager.DiscoveryListener.onServiceFound 的 NsdServiceInfo 中 Host 为 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:26 31 4
gpt4 key购买 nike

我正在尝试获取作为参数传递给 NsdManager.DiscoveryListener.onServiceFound() 的 NsdServiceInfo 的 mHost,但它为空。我有两个 android 设备,其中设备 1 是服务器,设备 2 是客户端。

这就是我在设备 1 中注册服务器的方式

public void registerService(int port, InetAddress myIp) {
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setPort(port);
serviceInfo.setServiceName(this.serviceName);
serviceInfo.setServiceType(SERVICE_TYPE);
serviceInfo.setHost(myIp);

this.nsdManager.registerService(
serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);
}

这就是我初始化 DiscoveryListener 的方式

public void initializeDiscoveryListener() {
discoveryListener = new NsdManager.DiscoveryListener() {

@Override
public void onServiceFound(NsdServiceInfo service) {
Log.d(TAG, "Service discovery success" + service);
if (!service.getServiceType().equals(SERVICE_TYPE)) {
Log.d(TAG, "Unknown Service Type: " + service.getServiceType());
} else if (service.getHost() == myIp) {
Log.d(TAG, "Same machine: " + service.getHost());
} else if (service.getServiceName().contains(serviceName)){
nsdManager.resolveService(service, resolveListener);
}
}
...
}
}

但是 service.getHost() 返回 null。
有什么建议吗?

最佳答案

我刚刚遇到了同样的问题,并在 Google 网络发现页面的帮助下设法解决了这个问题。

http://developer.android.com/training/connect-devices-wirelessly/nsd.html

问题是发现服务时不知道连接信息。您必须先解决它,然后 getHost() 才能工作。

你已经有了这条线:

    nsdManager.resolveService(service, resolveListener);

resolveListener 变量包含成功和失败的回调。当成功确定连接信息时,您想使用 getHost()。这是来自 Google 的 resolve 监听器:

    public void initializeResolveListener() {
resolveListener = new NsdManager.ResolveListener() {

@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
// Called when the resolve fails. Use the error code to debug.
Log.e(TAG, "Resolve failed" + errorCode);
}

@Override
public void onServiceResolved(NsdServiceInfo serviceInfo) {
Log.e(TAG, "Resolve Succeeded. " + serviceInfo);

if (serviceInfo.getServiceName().equals(mServiceName)) {
Log.d(TAG, "Same IP.");
return;
}
service = serviceInfo;
int port = service.getPort();
InetAddress host = service.getHost(); // getHost() will work now
}
};
}

关于android - NsdManager.DiscoveryListener.onServiceFound 的 NsdServiceInfo 中 Host 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094704/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com