2

アプリがアクティブな間にzeroconfを介してAndroidアプリにサービスを登録させ、アプリの終了後に登録を解除しようとしています。私の onResume メソッドには、次のコードがあります。

    // register ourselves with zero conf
    try {
        JmDNS jmdns = JmDNS.create();

        serviceInfo = ServiceInfo.create("_http._tcp.local.", "My App Service", SERVER_PORT, 0, 0, false, "path=/crazycatapp");
        jmdns.registerService(serviceInfo);
    } catch (Throwable t) {
        Debug.e("Error registering service with zeroconf", t);
    }

その後、私の onPause メソッドで:

    if(serviceInfo != null) {

            // unregister ourselves with zero conf
            JmDNS jmdns = JmDNS.create();
            jmdns.unregisterService(serviceInfo);
        }
    } catch (Throwable t) {
        Debug.e("Error unregistering service with zeroconf", t);
    }

マルチキャストの有効化などを行うコードを削除しました。ポイントは、サービスを問題なく登録でき、その後、別のデバイスで zeroconf ブラウザーを使用して表示できることです。ただし、一度登録すると、サービスを登録したデバイスで実際にwifiを無効にしない限り、サービスが消えることはありません。unregisterService の呼び出しは、実際にはサービス登録に影響を与えないようです。unregisterAllServices も効果がないようです。誰にもアイデアはありますか?

4

1 に答える 1

1

関連するコードを見ると、登録したのと同じインスタンスからJmDNS登録を解除する必要があると思います。そのため、登録解除スニペットで作成した新しいインスタンスの代わりに、登録スニペットからの参照を保持し、そのスニペットで登録解除を呼び出す必要があります。ServiceInfoJmDNSjmdns

于 2011-05-31T12:47:50.663 に答える