最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其余的samsung, huawei, xiaomi, nexus等等均没有问题。html
因此猜想应该是HTC优化了系统,把它给关掉了。因为手机开启UDP广播功能不只耗电,并且占用系统资源。可能有些手机厂家默认把这个功能给关掉了,java
你若想要用手机来发送接收UDP报文,得先申请,才能使用这个功能。android
解决方案:测试
1.在oncreate()方法里面实例化一个WifiManager.MulticastLock 对象lock优化
WifiManager manager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); WifiManager.MulticastLock lock= manager.createMulticastLock("localWifi");
2. 在调用广播发送、接收报文以前先调用lock.acquire()方法ui
3. 用完以后及时调用lock.release()释放资源,否决屡次调用lock.acquire()方法,程序可能会崩this
例如:spa
Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
另外,须要加入权限.net
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
这样HTC new one便可发送和接收广播报文了code
参考:
http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html