2013-03-18 5 views
6

最初に私の英語は申し訳ありませんが、私は「ネイティブライター」ではありません。Androidでブロードキャストメッセージを受信する

私はブロードキャストメッセージをC++で送信しており、Androidデバイスで受信したいと考えています。

System.out.println("receiveBroadcast()"); 
    DatagramSocket socket = new DatagramSocket(3866); 
    socket.setBroadcast(true); 
    System.out.println("Listen on " + socket.getLocalAddress() + " from " + socket.getInetAddress() + " port " + socket.getBroadcast()); 
    byte[] buf = new byte[512]; 
    DatagramPacket packet = new DatagramPacket(buf, buf.length); 
    while (true) { 
     System.out.println("Waiting for data"); 
     socket.receive(packet); 
     System.out.println(packet.getAddress()); 
     System.out.println("Data received"); 
    } 

標準のJava SEコンソールアプリケーションとしてコンパイルし、ネットワークに接続された他のコンピュータで実行すると動作します。 Android上では動作しません。理由はわかりません。 Androidではそれだけでデータを待ち、それを受けたことがない:

私は「オン/聴く::ヌルポートtrueから」ではなく、Windowsシステムの下で、標準のJavaコンソール・アプリケーションとしてそれを実行したとき、私は、面白いです何
03-18 15:47:05.045: I/System.out(16651): receiveBroadcast() 
03-18 15:47:05.055: I/System.out(16651): Listen on /:: from null port true 
03-18 15:47:05.065: I/System.out(16651): Waiting for data 

get "0.0.0.0.0.0.0.0をヌルポートから聞く"を得る。

私はマニフェスト、このような権限を持っている:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/> 

、助けてください!

+0

これを参照してください - http://code.google.com/p/boxeeremote/wiki/AndroidUDP。それを機能させると、将来の訪問者のためにあなた自身の質問に答えることができます。 – Shade

+0

リンクありがとうございます。私はそれを詳細に書きましたが、残念ながら私の問題を解決するアドバイスはありません。私は無線通信を使用するさらに別のPCでこのJavaコードを試しました。確かに問題はAndroidにありますが、解決方法はまだ分かりません。 –

+0

リンクからgetBroadcastAddressメソッドを実装しましたか?私はあなたの問題がバインドするアドレスを取得していると思います。 Androidの携帯電話には通常、WiFiとモバイルの少なくとも2つのインターフェースがあります。 – Shade

答えて

0

私はこれが古いスレッドであることを知っていますが、将来的に他の人を助けるかもしれないので、私はこれをここで共有していると思いました。それはあなたのデバイスやOSに依存する

有名なコードは私どちらも私が示唆されています2解決のために動作しませんでしたhereを書き、とにかくあなたは人はこれらのソリューションのいくつか試してみたいことがあります

の1- それが非アクティブのいくつかの時間後にオフにすることがないように、メッセージをブロードキャストし、いくつかの例のように

WifiManager wifi; 
wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
WifiManager.MulticastLock mLock = wifi.createMulticastLock("lock"); 
mLock.acquire(); 

2 - チェックこのリンクhereをお使いの無線LANのロックを作成BLありますOSによって悩まされる

関連する問題