debug is on the table: Enviando e Recebendo SMS no Android
Enviando e Recebendo SMS no Android
Questionar é uma coisa muito sábia. Quando estava dando aula sobre SMS um aluno (Renato se não me engano) questionou meu código, que na verdade estava muito similar (pra não dizer igual) ao código do livro de Ricardo Lecheta. Quando paramos pra analisar vimos como ficou fácil interceptar um SMS.
Primeiro devemos criar um BroadcastReceiver e registrá-lo no AndroidManifest.xml para ser disparado quando a ação "android.provider.Telephony.SMS_RECEIVED" for disparada pelo sistema operacional. Além disso, deve-se utilizar as permissões para enviar e receber SMS.
public void onReceive(Context context, Intent it){
SmsMessage message =
SMSUtils.getMessagesFromIntent(it)[0];
"Mensagem recebida de "+
message.getOriginatingAddress() + " - "+
message.getMessageBody(),
<receiver android:name="SmsReceiver">
android:name="android.provider.Telephony.SMS_RECEIVED"/>
<!-- Adicione essas permissões na tag manifest -->
android:name="android.permission.RECEIVE_SMS"/>
android:name="android.permission.SEND_SMS"/>
public void enviarSms(String numero, String msg) {
smsManager.sendTextMessage(numero, null, msg,
public static SmsMessage[] getMessagesFromIntent(
Intent intent){
Object[] pdusExtras =
(Object[])intent.getSerializableExtra("pdus");
SmsMessage[] messages =
new SmsMessage[pdusExtras.length];
for (int i = 0; i < pdusExtras.length; i++) {
messages[i] = SmsMessage.createFromPdu(
(byte[])pdusExtras[i]);
O Android utiliza o formato de mensagens em PDU que permite a leitura de SMS em vários encondings. Por isso, ao receber as mensagens, lemos a informação extra da intent chamada de "pdus". Essa informação é um array de arrays de bytes. Percorremos o array de bytes (que em cada posição tem outro array) e passamos cada array para um método que cria a mensagem SMS. Uma vez com o objeto android.telephony.SmsMessage, podemos obter as informações como telefone de origem e texto da mensagem.
Quando a mensagem é recebida ela vai para a caixa de entrada. Para excluírmos a mensagem recebida, basta usar o content provider da aplicação de SMS conforme explicado nesse post
Se quisermos evitar que a mensagem chegue na aplicação de mensagens, basta colocar uma prioridade (android:priority) maior do que a da aplicação de mensagens no intent-filter do Broadcast que recebe o SMS. E dentro dele, chamar o método abortBroadcast().
Postado por Nelson Glauber às 16:49
Marcadores: Android, BroadcastReceiver, enviando, excluir, pdu, recebendo, sms
Olá! É possível interceptar o envio de um SMS? Ou apenas o recebimento?
10 de setembro de 2014 13:05
Nâo facilmente como o recebimento, mas você pode usar um ContentObserver no ContentProvider de SMS. Mas eu não testei essa solução.
12 de setembro de 2014 04:53
Olá, como faço para que as mensagens enviadas não apareçam em ítens enviados?
25 de outubro de 2015 21:51
Pelo que lembro, a partir do KitKat isso não é mais possível. Dá uma olhada nesse vídeo e qualquer coisa me fala.