我试图将NsdServiceInfo的NsdServiceInfo作为参数传递给NsdManager.DiscoveryListener.onServiceFound(),但它是空的。我有两个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。
有什么建议吗?
发布于 2013-08-25 01:25:11
我刚刚遇到了同样的问题,并设法从谷歌的网页上解决了它的网络发现。
http://developer.android.com/training/connect-devices-wirelessly/nsd.html
问题是,当发现服务时,不知道连接信息。您必须先解决它,然后getHost()才能工作。
你已经有了台词:
nsdManager.resolveService(service, resolveListener);resolveListener变量包含成功和失败的回调。当成功确定连接信息时,您希望使用getHost()。下面是来自Google的解决方案侦听器:
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
}
};
}https://stackoverflow.com/questions/18094704
复制相似问题