我正在尝试让JmDNS在我的android程序中工作。我能够通过它找到所需的设备,但是我不完全了解如何将信息从JmDNS获取到启动JmDNS任务的对象。这是我的代码。

 protected void browse() {
      try {
        jmdns = (JmDNSImpl) JmDNS.create();

        jmdns.addServiceListener(type, listener = new ServiceListener() {
            public void serviceResolved(ServiceEvent ev) {

            }
            public void serviceRemoved(ServiceEvent ev) {

            }
            public void serviceAdded(ServiceEvent event) {
                DNSEntry addressEntry = jmdns.getCache().getDNSEntry(name, DNSRecordType.TYPE_A, DNSRecordClass.CLASS_ANY);
                if (addressEntry instanceof DNSRecord) {
                    ServiceInfo cachedAddressInfo = ((DNSRecord) addressEntry).getServiceInfo(true);
                    if (cachedAddressInfo != null) {
                        for (Inet4Address address : cachedAddressInfo.getInet4Addresses()) {
                          //I need to get the address that is here back out of this listener to the main thread
                        }
                    }
                }
            }

        });
    } catch (IOException e) {
        e.printStackTrace();
    }


我遇到的问题是,我有一个服务管理器对象,该对象具有其中包含browser方法的浏览器对象的实例。我无法获得对地址变量的服务管理器对象访问。因为JmDNS在创建以运行其任务时会生成其自己的线程,所以我尝试使用处理程序并运行它来发送带有变量的消息,但我似乎无法正确处理它。有人可以帮忙吗?

最佳答案

我认为您只想使用传递到服务添加方法中的ServiceEvent事件对象。它具有您需要的所有信息。

从我们的开源应用程序中查看此示例

http://code.google.com/p/tunesremote-plus/source/browse/trunk/src/org/tunesremote/LibraryActivity.java

关于android - 在Android/多线程上实现JmDNS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5433400/

10-12 04:11