Android 11以上的版本對網(wǎng)絡(luò)有限制,必須要支持multicast的NetworkInterface才可以進行網(wǎng)絡(luò)相關(guān)操作浪漠,所以需要在獲取HostAddresses的地方進行判斷NetworkInterface:
Enumeration nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) nis.nextElement();
if( !ni.supportsMulticast() ) { // added due to Android security requirements
Log.w("TAG", "NetworkInterface " + ni + " not supportsMulticast");
continue;
} // end of fix
Enumeration addrs = ni.getInetAddresses();
while (addrs.hasMoreElements()) {
InetAddress addr = (InetAddress) addrs.nextElement();
if (!isUsableAddress(addr))
continue;
nHostAddrs++;
}
}