На Android JmDNS неоднократно вызывается с включенной и выключенной сетью

У меня возникла проблема с использованием библиотеки JmDNS для приложения Android.

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

Но между этими созданиями экземпляров, если я выключаю и включаю Wi-Fi, хотя создание экземпляра 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!");
}

person rajath    schedule 06.02.2014    source источник
comment
Привет, Раджат, я также работаю над Android+jmdns. Я застрял с проблемой. Можешь помочь?   -  person Kanak Sony    schedule 07.02.2014
comment
@KanakSony, я бы посоветовал вам опубликовать вопрос на StackOverflow и, возможно, указать ссылку здесь, в комментариях. Если смогу, помогу. Если нет, то могут быть другие, которые могли бы дать ответ.   -  person rajath    schedule 07.02.2014


Ответы (1)


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

person rajath    schedule 07.02.2014