Android SMS получил, прервать трансляцию только для некоторых сообщений - PullRequest
3 голосов
/ 13 декабря 2011

Существует несколько примеров того, как читать SMS-сообщения в Broadcast Receiver с высоким приоритетом, а затем вызывать abortBroadcast (), чтобы остановить намерение достичь широковещательных приемников других приложений. Однако ни один из них, похоже, не принимает во внимание тот факт, что в данных намерения может быть несколько SMS, поэтому вызов abortBroadcast () убивает все SMS по существу в этом конкретном намерении.

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

Есть ли способ создать новое намерение и повторно передать одно или несколько SMS-сообщений из исходного полученного намерения, чтобы сообщения, которые я не хочу блокировать, могли переноситься в те приложения, которые их ожидают?

1 Ответ

2 голосов
/ 18 января 2012

Я только что исследовал эту же проблему и думаю (не положительно), что ответ очень прост.

Широковещательная рассылка содержит массив объектов SmsMessage, поскольку большие сообщения необходимо разбивать на несколько более мелких сообщений. Но это все еще одно текстовое сообщение.

Вы можете распознать следующий код:

Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];

PDU - это «Блок описания протокола», который является отраслевым стандартом для SMS-сообщений. Большое сообщение нужно разбить на несколько меньших сообщений, поэтому это массив объектов.

Поэтому я думаю, что ответ таков: вы никогда не отмените более одного текстового сообщения при вызове abortBroadcast ().

...