Android网络服务发现不会触发侦听器

时间:2014-04-11 18:18:57

标签: android

我最近一直在玩Android的网络服务发现功能。我有一切工作,但由于某种原因,我不能让NsdManager.RegistrationListener现在被调用。

我正在使用简单的回调初始化它,然后调用registerService,但它不会调用onServiceRegisteredonRegistrationFailed。代码如下。如果重要的话,我在服务中运行此注册。

我在日志中看到的是“注册服务”,但是从来没有一个回调者在监听器中。

private NsdManager mNsdManager;
private NsdManager.RegistrationListener mRegistrationListener;  

@Override
public void onCreate() {
    super.onCreate();

    mNsdManager = (NsdManager) getApplicationContext().getSystemService(getApplicationContext().NSD_SERVICE);

    initializeRegistrationListener();
    startAdvertising();
}

public void initializeRegistrationListener() {
    mRegistrationListener = new NsdManager.RegistrationListener() {
        @Override
        public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
            Log.i("myapp", "failed");
        }

        @Override
        public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {

        }

        @Override
        public void onServiceRegistered(NsdServiceInfo serviceInfo) {
            Log.i("myapp", "success");
        }

        @Override
        public void onServiceUnregistered(NsdServiceInfo serviceInfo) {

        }
    };
}

public void startAdvertising() {
    NsdServiceInfo serviceInfo  = new NsdServiceInfo();
    serviceInfo.setPort(new ServerSocket(0).getLocalPort());
    serviceInfo.setServiceName("_myapp_one");
    serviceInfo.setServiceType("_http._tcp.");

    Log.i("myapp", "registering service");
    mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
}

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 onServices onServiceRegistered或onRegistrationFailed永远不会发生。在我的情况下,我通过卸载我的应用程序并重新启动我正在使用的手机解决了它。

Android会更改服务名称以解决冲突,这就是为什么我们需要使用Android实际使用的名称更新我们最初请求的名称。我运行应用程序很多次,可能是Android可能用完了服务名称?