本文出處:http://blog.csdn.net/qq_27512671/article/details/77935210
答案是Android爲了減少耗電,默認是不接收組播消息的。想要接收,必須把這個開關打開。
打開方法:
private fun openMulticastLock() {
wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager
multicastLock = wifiManager.createMulticastLock("multicast.test")
multicastLock.acquire()
}
然後再次之後判斷一下打開狀態在進行後續的操作
if (multicastLock.isHeld) {
TODO("加入組播")
}
另外組播地址範圍也要寫正確:
224.0.0.0~224.0.0.255爲預留的組播地址(永久組地址),地址224.0.0.0保留不做分配,其它地址供路由協議使用;
224.0.1.0~224.0.1.255是公用組播地址,可以用於Internet;
224.0.2.0~238.255.255.255爲用戶可用的組播地址(臨時組地址),全網範圍內有效;
239.0.0.0~239.255.255.255爲本地管理組播地址,僅在特定的本地範圍內有效。
另外考慮到Android爲客官節省電量的願望,當不需要組播通訊時,要把這個鎖鎖上。
if (multicastLock.isHeld) {
multicastLock.release()
}