I want to write an app that will listen for alarm messages whenever it is in the range of a server (on the same WiFi network). What is the best way to do this?
Should I simply write a service that will act as a TCP/IP server and when it receives messages, have them generate an Android notification? or is there a better way to do this?
I need this app to be running all the time while Android is running.
How would I ensure that my 'listener' service is always running?
thanks in advance..
Levster
I had same problem... I wanted to use comet but I havent much time to research about it..
you can see some sample here..
http://blogs.webtide.com/dyu/entry/android_chat_using_jetty_cometd
and I choosed infinite loops for communication
here is my code..
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();
}
}
}