Dường như tiếp nhận đa hướng không hoạt động trên một số thiết bị Android. Tôi không thể nhận multicast với 4 trong số 13 thiết bị thử nghiệm. Trên 4 thiết bị đó có vẻ như ứng dụng không gửi yêu cầu IGMP để tham gia nhóm multicast.Tại sao tiếp nhận đa hướng không hoạt động trên một số thiết bị Android?
Mã nhận multicast trông giống như vậy:
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiManager.WifiLock wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);
WifiManager.MulticastLock multicastLock = wifiManager.createMulticastLock(TAG);
multicastLock.setReferenceCounted(true);
wifiLock.acquire();
multicastLock.acquire();
try {
MulticastSocket socket = new MulticastSocket(32123);
InetAddress group = InetAddress.getByName("224.1.2.3");
socket.joinGroup(group);
DatagramPacket packet;
byte[] buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
socket.leaveGroup(group);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
multicastLock.release();
wifiLock.release();
Ứng dụng có các quyền sau đây:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
Để chứng minh vấn đề tôi đã tạo một dự án thử nghiệm nhỏ bằng cách sử dụng mã ở trên vào GitHub: MulticastTest.
Có sự cố với mã của tôi không? Tôi có bỏ lỡ một sự cho phép?
CHỈNH SỬA 1: Sự cố này dường như không liên quan đến phiên bản Android cụ thể. Tôi có thể tái tạo hành vi trên Android 4.x, 5.x và 6.x.
EDIT 2: Có liên quan question.