2012-03-24 18 views
1

アラームメッセージが(同じWiFiネットワーク上の)サーバーの範囲内にあるときは常に、そのアラームメッセージを待機するアプリケーションを作成したいと考えています。これを行う最善の方法は何ですか?AndroidアプリがTCP/IPメッセージの受信を待ち受ける最善の方法は何ですか?

TCP/IPサーバーとして動作するサービスを作成し、メッセージを受信したら、Androidの通知を生成する必要がありますか?またはこれを行うためのよりよい方法がありますか?

Androidが動作している間は常にこのアプリが実行されている必要があります。 「リスナー」サービスが常に稼働していることを確認するにはどうすればよいですか?私は同じ問題を抱えていた事前に

感謝..

Levster

+0

バッテリーがなくなります。 C2DMを使用する... – Selvin

答えて

1

...私は彗星を使用していたが、私はそれについて研究するために多くの時間をhaventは。..

あなたはいくつかのサンプルを見ることができますここ.. http://blogs.webtide.com/dyu/entry/android_chat_using_jetty_cometd

と私はここに私はある通信

のための無限ループを選びましたコード。

public class ServerActivity extends Activity { 
private TextView serverStatus; 

// default ip 
public static String SERVERIP = "10.0.2.15"; 

// designate a port 
public static final int SERVERPORT = 12345; 

private Handler handler = new Handler(); 

private ServerSocket serverSocket; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.server); 
    serverStatus = (TextView) findViewById(R.id.server_status); 

    SERVERIP = getLocalIpAddress(); 

    Thread fst = new Thread(new ServerThread()); 
    fst.start(); 
} 

public class ServerThread implements Runnable { 
    String line = ""; 

    public void run() { 

     try { 
      if (SERVERIP != null) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Listening on IP: " + SERVERIP); 
        } 
       }); 
       serverSocket = new ServerSocket(SERVERPORT); 
       while (true) { 
        // listen for incoming clients 
        Socket client = serverSocket.accept(); 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Connected."); 
         } 
        }); 

        try { 
         BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
       //  byte[] resultBuff = new byte[0]; 
        //  byte[] buff = new byte[1024]; 
        // int k = -1; 
         // while((k = client.getInputStream().read(buff, 0, buff.length)) > -1) { 
         // byte[] tbuff = new byte[resultBuff.length + k]; // temp buffer size = bytes already read + bytes last read 
          // System.arraycopy(resultBuff, 0, tbuff, 0, resultBuff.length); // copy previous bytes 
          //System.arraycopy(buff, 0, tbuff, resultBuff.length, k); // copy current lot 
          //resultBuff = tbuff; // call the temp buffer as your result buff 
         //} 
         //System.out.println(resultBuff.length + " bytes read."); 




         while ((line = in.readLine()) != null) { 
          Log.d("ServerActivity", line); 


          handler.post(new Runnable() { 
           @Override 
           public void run() { 

           serverStatus.setText(line); 
           } 
          }); 
         } 
         break; 
        } catch (Exception e) { 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones."); 
          } 
         }); 
         e.printStackTrace(); 
        } 
       } 
      } else { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Couldn't detect internet connection."); 
        } 
       }); 
      } 
     } catch (Exception e) { 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        serverStatus.setText("Error"); 
       } 
      }); 
      e.printStackTrace(); 
     } 
    } 
} 
関連する問題