2014-02-06 43 views
2

我在爲Android應用程序使用JmDNS庫時遇到問題。在Android上,通過網絡ON和OFF反覆調用JmDNS

由於Bonjour不會定期發送保持活動消息,因此我每隔30秒關閉並打開一個新的JmDNS實例,以便可以調用serviceAdded和serviceResolved函數。

但是在這些實例創建之間,如果我關閉並在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庫中沒有任何問題。在我的代碼中,我正在關閉實例調用之間的多播套接字,這就造成了一個問題。