2014-02-06 9 views
2

Android 앱에 JmDNS 라이브러리를 사용하는 데 문제가 있습니다.Android에서 JmDNS가 네트워크 ON 및 OFF로 반복적으로 호출됩니다.

Bonjour는 주기적으로 keep-alive 메시지를 보내지 않으므로 serviceAdded 및 serviceResolved 함수를 호출 할 수 있도록 30 초마다 새 JmDNS 인스턴스를 닫고 엽니 다.

그러나 이러한 인스턴스 생성 사이에서, Wifi를 켰다가 끄면 JmDNS 인스턴스 생성이 성공하지만 serviceAdded 및 serviceResolved 함수가 호출되지 않습니다.

내 주요 의문은 다음과 같습니다

1)가 또 다시 이러한 인스턴스를 다시 만들고, 따라서 일종의-의 폴링에 영향을 확인 있습니까? 아니면 더 좋은 방법이 있습니까?

2) 네트워크가 꺼져있는 경우 JmDNS 인스턴스를 만들 때마다해야 할 일이 있습니까? 비슷한 문제가있을 수 있습니다 사람들을위한

private void _startJmDnsService() throws IOException { 

    if (mJmdns != null) { 
     if (mJmDnsServiceListener != null) { 
      mJmdns.removeServiceListener(mBonjourServiceType, mJmDnsServiceListener); 
      mJmDnsServiceListener = null; 
     } 

     mJmdns.close(); 
     mJmdns = null; 
    } 

    Log.d(TAG, "starting JmDNS"); 
    mJmdns = JmDNS.create(getInet4Address()); 
    mJmDnsServiceListener = new ServiceListener() { 
     public void serviceResolved(ServiceEvent ev) { 
      ServiceInfo serviceInfo = ev.getInfo(); 
      Log.w(TAG, "serviceResolved for device " + serviceInfo.getName()); 
     } 

     public void serviceRemoved(ServiceEvent ev) { 
      ServiceInfo serviceInfo = ev.getInfo(); 
      Log.w(TAG, "serviceRemoved for device " + serviceInfo.getName()); 
      CDevice.removeDevice(deviceId); 
     } 

     public void serviceAdded(ServiceEvent event) { 
      // Required to force serviceResolved to be called again 
      // (after the first search) 
      ServiceInfo serviceInfo = event.getInfo(); 
      Log.w(TAG, "serviceAdded for device " + serviceInfo.getName()); 
      mJmdns.requestServiceInfo(event.getType(), event.getName(), 1); 
     } 
    }; 

    mJmdns.addServiceListener(mBonjourServiceType, mJmDnsServiceListener); 
    Log.w(TAG, "mJmdns Service Listener added!"); 
} 
+0

안녕하세요 rajath, 저는 Android + jmdns에서도 작업하고 있습니다. 나는 문제가 붙어있다. 도와 줄 수 있어요? –

+0

@ KanakSony, StackOverflow에 질문을 게시하고 코멘트에 링크를 제공하는 것이 좋습니다. 가능한 경우 도와 드리겠습니다. 그렇지 않은 경우 대답을 제공 할 수있는 다른 사람들이있을 수 있습니다. – rajath

답변

1

:

여기 내 코드의 조각입니다. JmDNS 라이브러리에 문제가있는 것은 없습니다. 내 코드에서는 인스턴스 호출간에 멀티 캐스트 소켓을 닫고 있는데 문제가 발생했습니다.