一部の Android 端末でマルチキャスト受信が動作しないようです。13 台中 4 台のテスト端末でマルチキャストを受信できません。これらの 4 つのデバイスでは、アプリがマルチキャスト グループに参加するための IGMP 要求を送信していないようです。
マルチキャストを受信するコードは次のようになります。
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();
アプリには次の権限があります。
<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"/>
問題を実証するために、GitHub で上記のコードを使用して小さなテスト プロジェクトを作成しました: MulticastTest。
私のコードに問題はありますか? 私は許可を逃しますか?
編集 1 : この問題は、特定の Android バージョンに関連していないようです。Android 4.x、5.x、および 6.x で動作を再現できます。
EDIT 2 : 関連する質問があります。