重复JmDNS设备搜索

时间:2013-12-28 12:34:51

标签: android jmdns

我想每5秒扫描一次Bonjour设备(_http._tcp.local.)并获得一个带有找到的设备(名称,字符串)的arraylist。我需要在服务(以及后台线程)中完成它。

现在我每隔5秒钟就会创建一个新的JmDNS实例(JmDNS.create())并泄漏内存;)。 我认为必须有更好的方法来做到这一点,但我不知道......谁可以帮助我?

 try {
      final JmDNS jm;
      ArrayList<String> foundDevices = new ArrayList<String>();
      jm = JmDNS.create();
      jm.addServiceListener("_http._tcp.local.", listener = new ServiceListener() {
      @Override
      public void serviceAdded(ServiceEvent event) {
            jm.requestServiceInfo(event.getType(), event.getName(), 1);
      }

      @Override
             public void serviceRemoved(ServiceEvent event) {
      }

      @Override
      public void serviceResolved(ServiceEvent event) {
             JSONObject obj = null;
             ServiceInfo info = event.getInfo();
             //Log.e("TCLogging", "RAW: " + info);

             String Name = info.getName();
             foundDevices.add(Name);

             } catch (Exception e) {
                 Log.e("TCLogging", "Error");
             }
         }
      });
      ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.", "TC_" + android.os.Build.MODEL, 0, "AndroidApp");
      jm.registerService(serviceInfo);


      } catch (Exception e) {
          Log.e("TCLogging", e.toString());
      }

2 个答案:

答案 0 :(得分:1)

您可以每N秒调用JmDNS.list(String type),这将返回它找到的服务的ServiceInfo。第一次调用需要时间(您可以通过overload列表(字符串类型,长超时)来控制它,默认值似乎是6秒。

答案 1 :(得分:0)

我对JmDNS不了解的一点是,当设备被发现或在网络中消失时,您会收到通知。我想每隔N秒扫描一次,看看网络中有哪些设备。但是等到你收到任何设备更改的通知之后,它会更容易(并且资源密集程度更低)。

接受的答案确实对我来说每N秒实现一次扫描,但这不是最理想的方法!