從示例http://developer.android.com/training/connect-devices-wirelessly/nsd.html代碼開始,我一直在構建一個旨在在同一子網中的多個設備上運行的應用程序。每個設備都註冊相同的服務並嘗試使用該服務發現子網中的其他服務。如文檔中所述,每次設備註冊服務時,名稱都會被添加一個附加的「(N)」,其中N爲整數。每個設備,當它做一個發現alaNsdManager無法解析多個發現的服務
public void discoverServices() {
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
}
發現所有的服務註冊。我使用散列圖追蹤它們,該散列圖保留了發現的NsdServiceInfo
記錄。
問題出現在我嘗試解決它們時。如果我迭代hashmap並解決每個NsdServiceInfo
,只有第一個成功。我認爲可能問題是需要單獨的NsdManager.ResolveListener
,所以我爲每個NsdServiceInfo
記錄創建一個,但沒有喜悅。
如果我阻止hashmap中的第一個服務被解析,下一個工作。下面是DDMS輸出:
07-09 17:11:36.799: D/P2PServiceManager(1958): Resolving services with type : PeerDiscovery
07-09 17:11:36.799: W/P2PServiceManager(1958): Resolving PeerDiscovery services with name : PeerDiscovery (3)
07-09 17:11:36.799: W/P2PServiceManager(1958): Resolving PeerDiscovery services with name : PeerDiscovery (2)
07-09 17:11:36.807: E/P2PServiceManager(1958): RRRRRRRRRRRRRRRRRRR Resolve failed : error code 3
07-09 17:11:36.830: E/P2PServiceManager(1958): RRRRRRRRRRRRRRRRRRR Resolve Succeeded. name: PeerDiscovery\032(3)type: ._http._udphost: /192.168.1.145port: 53221txtRecord: null
我懷疑有一些非重入代碼或一些其他類似的問題,但如果其他人已經看到了這個問題,我想知道。谷歌和StackOverflow似乎沒有答案。
[2014-07-24]最後我堅持迭代發現的服務來解決它們,但是在解決下一個服務之前等待每個結果。我認爲這是做事情的正確方法,但是從NsdManager doc不是很清楚。
這是什麼運氣?似乎有同樣的問題 –