端末スリープ時のDiagramSocket受信について

706 views
Skip to first unread message

ポコス

unread,
Nov 19, 2014, 3:58:01 AM11/19/14
to android-g...@googlegroups.com
お世話になっております。

現在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() );
   }
  }
 }


ポコス

unread,
Nov 19, 2014, 4:10:06 AM11/19/14
to android-g...@googlegroups.com
申し訳ありません。各種バージョンを記載しておりませんでした。

Android OS             4.1.1
プラットフォーム 4.0
APIレベル             14           
IDE                          Eclipse  4.4.0
SDK Tools               Rev 23.0.2
SDK Platform-tools  Rev20
SDK Platform           API 20

情報開示に不足などございましたらご指摘頂ければと思います。

Shigeo Mutoh

unread,
Nov 20, 2014, 7:04:56 AM11/20/14
to android-g...@googlegroups.com
武藤です。

setSoTimeout(1000)が短すぎるのではないでしょうか?
画面OFF時はCPUもかなりお休みしていると思うので。
1秒のタイムアウトが是非とも必須と言われると、困っちゃいますが。

では。

Shigeo Mutoh

unread,
Nov 20, 2014, 7:15:37 AM11/20/14
to android-g...@googlegroups.com
武藤です。

先ほどのは忘れてください。ここ読んでください。
http://stackoverflow.com/questions/19673354/some-devices-dont-receive-udp-broadcasts-when-screen-off

流し読みですが、full wakelockしないとUDPを受信できなくなってる
ようです。

では。


Reply all
Reply to author
Forward
0 new messages