मैं एंड्रॉइड नेटिव सर्विस डिस्कवरी का उपयोग कर एक एप्लिकेशन चलाने की कोशिश कर रहा हूं लेकिन कभी-कभी जब मैं एप्लिकेशन चलाता हूं, तो यह मेरे नेटवर्क से सभी सेवाओं को नहीं खोजता है। मैं चार गैलेक्सी नेक्सस का उपयोग करके 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);
तो मैं यह 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);
सेवाओं मैं NsdManager से विधि discoverServices का उपयोग की खोज करने के लिए:
mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD,
mDiscoveryListener);
mDiscoveryListener के साथ निम्नानुसार है:
mDiscoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onDiscoveryStarted(String regType) {
Log.d(TAG, "Service discovery started");
}
@Override
public void onServiceFound(NsdServiceInfo service) {
Log.d(TAG, "Service discovery success");
Log.d(TAG, String.format("%s %s %s %d",
service.getServiceName(), service.getServiceType(),
service.getHost(), service.getPort()));
if (!service.getServiceType().contains(SERVICE_TYPE)) {
Log.d(TAG,
"Unknown Service Type: " + service.getServiceType());
} else if (service.getServiceName().equals(mServiceName)) {
Log.d(TAG, "Same machine: " + mServiceName);
} else {
mNsdManager.resolveService(service, mResolveListener);
}
}
@Override
public void onServiceLost(NsdServiceInfo service) {
Log.e(TAG, "service lost" + service);
}
@Override
public void onDiscoveryStopped(String serviceType) {
Log.i(TAG, serviceType + " Discovery stopped: " + serviceType);
}
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
Log.e(TAG, serviceType + " Discovery failed: Error code:"
+ errorCode);
mNsdManager.stopServiceDiscovery(this);
}
@Override
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
Log.e(TAG, serviceType + " Discovery failed: Error code:"
+ errorCode);
mNsdManager.stopServiceDiscovery(this);
}
};
क्या मैं कुछ गलत कर रहा हूं? क्या कोई इस के लिए समाधान या कामकाज जानता है?
मैं अपनी पोस्ट acros camer एक एनपीई कि पॉपअप करने के लिए जब मैं एक ही एनएसडी की जानकारी के साथ नेटवर्क में दो उपकरणों है लगता है ठीक करने के लिए प्रयास करने के दौरान ... तो, मैं डॉन ' आपके पास अभी तक कोई जवाब नहीं है, लेकिन मुझे लगता है कि आप उस जानकारी को प्राप्त करने का प्रयास कर रहे हैं जिसे आपने अपने लॉग स्टेटमेंट में हल नहीं किया है। –
सभी डेवलपर्स के लिए यह एक आम प्रथा है कि –
त्रुटियों को खोजने के लिए सभी चरों को पकड़ने या मुद्रित करने का उपयोग करके आप केवल SERVICE_TYPE की सेवाओं की खोज कर रहे हैं, जो इस उदाहरण में http वेब सर्वर हैं। –