我最近一直在尝试运用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);
}