我正在尝试使用Android Native Service Discovery运行应用程序,但有时当我运行应用程序时,它不会从我的网络中发现所有服务.我使用四个galaxy nexus 运行来自https://github.com/joeluchoa/nsd的代码,并且大多数时候他们每个人同时发现不同数量的服务.
基本上我使用ServerSocket运行服务:
ServerSocket server = new ServerSocket(0);
Log.i(TAG, "IP " + server.getInetAddress()
+ ", running on port " + server.getLocalPort());
Intent intent = new Intent(MySocket.this,
MyPresence.class);
intent.putExtra("PORT", server.getLocalPort());
startService(intent);
Run Code Online (Sandbox Code Playgroud)
然后我使用NsdManager中的registerService方法发布它:
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName(Build.SERIAL + "-" + new Date().getTime());
serviceInfo.setServiceType(SERVICE_TYPE);
serviceInfo.setPort(port);
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD,
mRegistrationListener);
Run Code Online (Sandbox Code Playgroud)
要发现服务,我使用NsdManager中的方法discoverServices:
mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD,
mDiscoveryListener);
Run Code Online (Sandbox Code Playgroud)
使用mDiscoveryListener如下:
mDiscoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onDiscoveryStarted(String regType) {
Log.d(TAG, "Service discovery started");
}
@Override
public void onServiceFound(NsdServiceInfo service) { …Run Code Online (Sandbox Code Playgroud)