お世話になっております。
現在PC側からUDPにて一定間隔で送信された数値をandroid端末で監視するアプリケーションの開発を行っております。
android側はDiagramSocketを用いて、別スレッドにて常時受信監視を行わせ、UI側で定期的に受信データをチェックし、
異常値の場合には音を鳴らすような動きをさせております。
画面がONの状態であれば問題なく動作するのですが、電源ボタンにより画面OFF(端末をスリープ)にすると異常値を送信しても音が鳴らず、再び電源ボタンを押して画面を表示すると異常値に反応するようになります。
デバッガにて画面OFF時の受信ルーチンを確認してみたところ、スレッド自体は定期動作しているようなのですが、DiagramSocketのreceiveにて一向に受信しない(タイムアウトする)ことが分かりました。
WifiがOFFになっているのかと思い、OSのWifi設定を確認しましたが、スリープ時でも接続を継続する設定になっており、念のためPINGにて反応を確認しても問題なく応答があります。
DiagramSocketの仕様として端末スリープ時には受信できないのでしょうか。
それともSocketやManifestの設定が悪いのでしょうか。
何方かご教示頂ければ幸いです。
-------------------- ソース一部抜粋 ------------------------------
●初期化部分
m_RecvSocket = new DatagramSocket( 1234 );
m_DataRecvBuff = new DatagramPacket( new byte[1024], 1024 );
m_DataRecvThread = new Thread( this );
m_RecvSocket.setSoTimeout( 1000 );
m_DataRecvThread.start();
●受信スレッド処理部
public void run() {
while( !m_DataRecvFinish ) {
try {
m_DataRecvBuff.setLength( 1024 );
m_RecvSocket.receive( m_DataRecvBuff );
byte aData[] = m_DataRecvBuff.getData();
// 受信データの解析
} catch ( SocketTimeoutException ex ) {
Log.e("err", ex.getMessage() );
} catch ( Exception ex ) {
Log.e("err", ex.getMessage() );
}
}
}