2014-02-06 3 views
2

У меня возникла проблема с использованием библиотеки JmDNS для приложения для Android.На Android, JmDNS вызывается повторно с включенной и выключенной сетью

Поскольку Bonjour не отправляет периодические сообщения о сохранении активности, я закрываю и открываю новый экземпляр JmDNS каждые 30 секунд, так что я могу вызвать вызываемые функции serviceAdded и serviceResolved.

Но между этими созданиями экземпляра, если я отключусь и на Wi-Fi, хотя создание экземпляра JmDNS завершается успешно, мои служебные и служебные функции не вызываются.

Моих основные сомнений:

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

Привет раджат, я также работаю над Android + jmdns. Я застрял в проблеме. Можете ли вы помочь? –

+0

@ KanakSony, я бы предложил вам опубликовать вопрос о StackOverflow и, возможно, предоставить ссылку здесь в комментариях. Если смогу, я помогу. Если нет, могут быть и другие, которые могли бы дать ответ. – rajath

ответ

1

Для тех, которые могли бы иметь подобную проблему. В библиотеке JmDNS ничего не было. В моем коде я закрывал многоадресный сокет между вызовами экземпляра, что создавало проблему.

Смежные вопросы