If you only need to react to incoming sms, you can just register a broadcast receiver for that. No special background service needed. Your code will be called whenever a SMS is received.
In your android manifest point out a java class that extends BroadcastReceiver to be called for incoming SMS:
<receiver android:name="mypackage.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Don't forget the permission:
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
And then implement your SmsReceiver
class:
public class SmsReceiver extends BroadcastReceiver {
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION.equals(action)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object messages[] = (Object[]) bundle.get("pdus");
if (messages != null) {
SmsMessage smsMessages[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessages[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
SmsMessage smsMessage = smsMessages[n];
String from = smsMessage.getOriginatingAddress();
//do your thing
}
}
}
}
}
}