本文出處:http://blog.csdn.net/qq_27512671/article/details/77935210
答案是Android為了減少耗電瘦赫,默認(rèn)是不接收組播消息的许蓖。想要接收,必須把這個(gè)開關(guān)打開。
打開方法:
private fun openMulticastLock() {
wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager
multicastLock = wifiManager.createMulticastLock("multicast.test")
multicastLock.acquire()
}
然后再次之后判斷一下打開狀態(tài)在進(jìn)行后續(xù)的操作
if (multicastLock.isHeld) {
TODO("加入組播")
}
另外組播地址范圍也要寫正確:
224.0.0.0~224.0.0.255為預(yù)留的組播地址(永久組地址),地址224.0.0.0保留不做分配,其它地址供路由協(xié)議使用赖草;
224.0.1.0~224.0.1.255是公用組播地址,可以用于Internet剪个;
224.0.2.0~238.255.255.255為用戶可用的組播地址(臨時(shí)組地址)秧骑,全網(wǎng)范圍內(nèi)有效;
239.0.0.0~239.255.255.255為本地管理組播地址,僅在特定的本地范圍內(nèi)有效乎折。
另外考慮到Android為客官節(jié)省電量的愿望绒疗,當(dāng)不需要組播通訊時(shí),要把這個(gè)鎖鎖上骂澄。
if (multicastLock.isHeld) {
multicastLock.release()
}