2012-01-28 6 views
0

Я хочу наблюдать за конкретным SMS и обрабатывать его в приемнике, когда он придет. Затем я хочу «съесть его», чтобы он не пузырился вверх и не показывался пользователю (его нужно обрабатывать «молча»). Это возможно? Если да, то как?Возможно ли предотвратить намерение от намерения («съесть» намерение)?

+0

** Вы должны изучить андроид-жаргон, чтобы мы могли лучше/более легко понять ваш вопрос. ** Если я правильно понимаю, вы подразумеваете молча, «поймав», что смс-сообщение, когда оно поступит, и ** УДАЛИТЬ ** он из базы данных, так что он не отображается как уведомление.? Это верно? – JoxTraex

+0

Да, я не хочу, чтобы пользователь видел сообщение, если оно соответствует критериям, которые я ищу (то есть принадлежит моему приложению); конечно, если это не будет перехвачено моим приложением, тогда я хочу «передать его по линии». –

ответ

4

Возможно ли это? Если да, то как?

Поскольку SMS вещание происходит с упорядоченной передачей, ваш BroadcastReceiver можно назвать abortBroadcast(), чтобы остановить его от обрабатываются с более низким приоритетом приемниками.

Here is a blog post с течением времени обсуждает заказываемые передачи. Here is a sample project основываясь на этом сообщении в блоге. Here is a sample SMS BroadcastReceiver, который условно выполняет abortBroadcast().

1
I then want to "eat it" so that it doesn't bubble upwards and display to the user (it should be handled "silently") 

А? Усилиями, которые вы регистрируете для получения , являются, которые обрабатываются бесшумно , если только вы не решите обработать его «громко».

EDIT

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

+0

Хорошо, но SMS, как правило, все равно будет видеть пользователь, хотя я сначала «заглянул» в него, если не ошибаюсь. –

1

Вы ищете конструкцию службы в Android. Он предназначен для запуска чего-то, не требуя интерфейса (например, Activity).

BroadcastReceiver - это дополнительная функциональность, которую вы должны исследовать, чтобы поймать SMS-событие.

+0

Я рассмотрел использование Сервиса, но BroadcastReceiver - это то, что я использую, и должен работать просто денди. –

1

Да, он может быть прерван методом abortBroadcast(), и если вы установите приоритет IntentFilter на 1000 (самый высокий приоритет), то этот ресивер получит трансляцию перед системой.