我最近一直在玩Android的网络服务发现功能。我有一切工作,但由于某种原因,我不能让NsdManager.RegistrationListener
现在被调用。
我正在使用简单的回调初始化它,然后调用registerService
,但它不会调用onServiceRegistered
或onRegistrationFailed
。代码如下。如果重要的话,我在服务中运行此注册。
我在日志中看到的是“注册服务”,但是从来没有一个回调者在监听器中。
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);
}
答案 0 :(得分:1)
我遇到了同样的问题。 onServices onServiceRegistered或onRegistrationFailed永远不会发生。在我的情况下,我通过卸载我的应用程序并重新启动我正在使用的手机解决了它。
Android会更改服务名称以解决冲突,这就是为什么我们需要使用Android实际使用的名称更新我们最初请求的名称。我运行应用程序很多次,可能是Android可能用完了服务名称?