Я не пробовал это, но теоретически это должно работать:
В Android-трансляция SMS отправляется как заказанная трансляция , что означает, что приемники обрабатываются по порядку и могут отменить трансляцию. См. SMSDispatcher.java , строка 420.
Чтобы быть вызванным первым, получатель должен иметь более высокий приоритет, чем другие.
<intent-filter android:priority="1000" >
. . .
</intent-filter>
Чтобы отменить широковещательный вызов broadcastReceiver.setResultCode(RESULT_CANCELED)
. Таким образом, трансляция SMS будет отменена и не будет отображаться системным приложением SMS (и SMS-уведомителем).
Обновление:
Также попробуйте использовать broadcastReceiver.setResultCode(Intents.RESULT_SMS_HANDLED)
.
Обновление 2:
пользователь672601 отметил в другом ответе, что это действительно работает, но он использовал abortBroadcast()
внутри приемника вещания.