2011-03-25 3 views
1

JmDNS를 내 안드로이드 프로그램에서 사용하려고합니다. 원하는 장치를 발견 할 수는 있지만 JmDNS 작업을 시작한 개체로 JmDNS에서 정보를 가져 오는 방법을 완전히 이해하지 못했습니다. 여기 내 코드가있다.Android/멀티 스레딩에서 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(); 
    } 

제가 실행중인 문제는 브라우저 메서드의 인스턴스가있는 브라우저 개체의 인스턴스가있는 서비스 관리자 개체가 있다는 것입니다. 주소 변수에 대한 서비스 관리자 개체 액세스를 가져올 수 없습니다. JmDNS는 자신의 스레드를 생성 할 때 자신의 작업을 실행하기 위해 생성 되었기 때문에 핸들러와 runnable을 사용하여 변수에 메시지를 보내려고 시도했지만 올바르게 할 수 없습니다. 누구든지 도와 줄 수 있습니까?

답변

1

서비스 추가 이벤트 메서드에 전달 된 ServiceEvent 이벤트 객체를 사용하고 싶습니다. 그것은 당신이 필요로하는 모든 정보를 가지고 있습니다.

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

+0

그게이 일을하지만, 어떤 이유로 JmDNS는 서비스 유형의 IP 주소를 해결할 수없는 가정 방법입니다 그래 내가 지금 원하는 우리의 오픈 소스 응용 프로그램에서이 예제를 참조하십시오 실제로 JmDNS 캐시를 파고 들어가서 다른 서비스 유형에서 얻을 수 있었던 IP 주소를 가져와야합니다. – Sam

+0

그렇게하지 않아도됩니다. 목록에서 IP 주소를 사용할 수 있어야합니다. event.ServiceInfo 객체에는 getIP4VAddresses() 및 getIPV6Addresses()에 대해 절대적으로 작동해야하는 두 가지 메소드가 있습니다. – Melloware

+1

추가하지 않고 코드를 serviceResolved로 옮기려고 했습니까? IP 주소 등 Bonjour 서비스의 모든 정보를 얻은 후에 해결 된 새로운 서비스가 있다는 알림이 추가되었습니다. – Melloware