環境:
電話: Motorola Xoom、モデル MZ601、Android 3.0.1
ルーター: Netgear WNR3500U/WNR3500L
問題:
Android には、単純な Java マルチキャスト リスナーの一部があります。
public void listenMulticast(){
try{
WifiManager wifi = (WifiManager)App.getContext().getSystemService( Context.WIFI_SERVICE );
/*****Get multicast lock*****/
MulticastLock multicastLock = wifi.createMulticastLock("MyApp");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
/*****Create a socket*****/
MulticastSocket socket = new MulticastSocket(PORT);
socket.joinGroup(InetAddress.getByName(HOST));
/*****Receive a message*****/
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.setSoTimeout(TIME_OUT);
socket.receive(packet);
...
} catch()
}
アプリケーションは、ローカル範囲でマルチキャストを受信します (グループ 224.0.0.250 およびポート 6791 で試行) が、パブリック範囲でのマルチキャスト (socket.receive() メソッドでのタイムアウト例外) を認識しません: 228.5.6.7 (および同じポート 6791)例えば)。
セキュリティ権限は標準です。
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"></uses-sdk>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"></uses-permission>
同じネットワーク内の別の Android フォンで試してみたところ、グループ 228.5.6.7 でマルチキャストを受信しました。しかし、この Motorola Xoom はローカル マルチキャストしか受信しません。
何が間違っている可能性があるのか、いくつかのアイデアをありがとう。