Android 如何在网络服务发现中获取InetAddress列表?

Android 如何在网络服务发现中获取InetAddress列表?,android,nsd,Android,Nsd,嗨,朋友们,我正在使用android应用程序中的NETWROK服务发现来查找服务类型“\u dockset.\u tcp”。我正在成功获取设备列表,但无法获取所有设备的InetAddres列表。我只获取第一个发现的设备的INETADRES,但我需要所有发现的设备的INETADRES。你会非常感谢你的帮助。我正在使用 public void startResolveListener(){ mResolveListener= new NsdManager.ResolveListener()

嗨,朋友们,我正在使用android应用程序中的NETWROK服务发现来查找服务类型“\u dockset.\u tcp”。我正在成功获取设备列表,但无法获取所有设备的InetAddres列表。我只获取第一个发现的设备的INETADRES,但我需要所有发现的设备的INETADRES。你会非常感谢你的帮助。我正在使用

public void startResolveListener(){
    mResolveListener= new NsdManager.ResolveListener() {
        @Override
        public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
            Log.d("resolve service failed"," with error"+errorCode);
        }

        @Override
        public void onServiceResolved(NsdServiceInfo serviceInfo) {
            ;
            int port=serviceInfo.getPort();



            InetAddress host=serviceInfo.getHost();

            mHost=String.valueOf(host);//here i am getting one host





        }
    };
}

我不知道如何迭代inetades

您需要遵循
NsdManager
图,并使您的侦听器适应:

mResolveListener= new NsdManager.ResolveListener() {
        @Override
        public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
            Log.d("resolve service failed"," with error"+errorCode);
            mNsdServiceList.remove(serviceInfo);
        }

        @Override
        public void onServiceResolved(NsdServiceInfo serviceInfo) {
              if(!mNsdServiceList.contains(serviceInfo)){
                  mNsdService.add(serviceInfo);
                  mNsdManager.resolveService(....);
              }
        }
    };

您需要单独对服务信息实例(主机、类型等)执行操作。当然,您可以修改条件以进一步添加到列表中,例如筛选服务类型和/或名称

谢谢你的回答,但我没有得到你的解释。如果(!mNsdServiceList.contains(serviceInfo)){mNsdService.add(serviceInfo);mNsdManager.resolveService(..);}
mNsdServiceList
只是一个
列表
。该语句用于检查列表是否包含该nsdserviceinfo。但我只返回一个serviceinfo。网络中有多个设备使用我正在查找的服务。在OnServiceFund方法中,我获取所有设备,但我的resolve listener只解析一个设备