android abortBroadcast не останавливает sms от трансляции

в моем методе onReceive у меня есть этот код:

if (from.equals(number)) {
    abortBroadcast();
    in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(in);
    Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(context, "Not from needed number", Toast.LENGTH_SHORT).show();
}   

where number = "29853" - номер сообщения, из которого я хочу поймать и не сохранять в папке "Входящие".

этот код работает правильно - если sms с номера первый тост работает, и он печатает содержимое сообщения, если sms не с номера "не с нужного номера" печатается. Проблема в том, что abortBroadcast не делает свою деловитость-сообщение с номера все еще находится в папке "Входящие" телефона, хотя приоритет получателя-1000:

<receiver android:name=".service_classes.MyReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED"
                android:priority="1000" />
    </intent-filter>
</receiver>

в чем проблема-почему не работает abortBroadcast?

4 ответов


на abortBroadcast() не удалить сообщения из папки "Входящие", это просто подавление уведомления в строке состояния. Чтобы удалить sms из папки "Входящие", обратитесь к этой ссылке


перемещение android:priority к intent-фильтру, где он принадлежит.

 <intent-filter android:priority="9999999"> 

тогда у вас, скорее всего, будет приоритет, и ваша отмена будет работать. Я испытывал его и он работает.


с Android 4.4 вы не можете прервать эти передачи. Вот ссылка на источники AOSP, которые показывают это:

https://github.com/CyanogenMod/android_frameworks_opt_telephony/blob/d43b5b1ca91e0aac0c697546a5cb341ffa758e0b/src/java/com/android/internal/telephony/ImsSMSDispatcher.java#L605


Я использовал это некоторое время назад и он работал, я мог бы отклонить некоторые сообщения, чтобы показать, но это не работает сейчас. Я думаю, что android больше не позволяет пользователю полностью контролировать событие SMS_RECEIVED.