问题:
同一套程序在中兴手机和华为手机上可以接收到UDP广播报文,但在HTC手机上却接收不到?
问题原因:(仅猜测而已,未经过验证)
手机开启UDP广播功能不仅耗电,而且占用系统资源。可能有些手机厂家默认把这个功能给关掉了,
你若想要用手机来发送接收UDP报文,得先申请,才能使用这个功能。
具体如何申请和释放:
1、可先在oncreate()方法里面实例化一个WifiManager.MulticastLock 对象lock;具体如下:
WifiManager manager = (WifiManager) this
.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock= manager.createMulticastLock("test wifi");
2、在调用广播发送、接收报文之前先调用lock.acquire()方法;
3、用完之后及时调用lock.release()释放资源,否决多次调用lock.acquire()方法,程序可能会崩,详情请见
Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
注;记得在配置文件里面添加如下权限:
<uses-permissionAndroid:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
经过这样处理后,HTC手机也能正常发送接收到广播报文。
小结:事出有因,多想想为啥,这样我们才有可能找到问题的真正原因。
参考网站: