Это, конечно, возможно.
Зарегистрируйте получателя в своем манифесте так:
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
В методе onReceive вашего получателя напишите:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
//do your stuff
abortBroadcast();
}
}
Не забудьте установить разрешение на получение SMS-сообщений в манифесте следующим образом:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
Без правильного набора разрешений он молча завершится со следующим сообщением logcat:
07-13 12:54:13.208: WARN/ActivityManager(201): Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } to com.mypackage requires android.permission.RECEIVE_SMS due to sender com.android.phone (uid 1001)
Наконец, возможно, что другое приложение зарегистрировало получателя с более высоким приоритетом, чем у вас, и поэтому оно получает трансляцию до того, как вы отмените ее. Поэтому, если ничего не помогло, попробуйте поэкспериментировать с более высокими значениями приоритета.