短信提醒 BroadcastReceiver

当系统短信时,会对外发送一个广播,该广播的Intent的action 为 .因此只要在程序中开发一个对应的 BroadcastReceiver 即可监听到系统的短信.

自定义 Receiver

package com.test.systembroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class MySmsReceiver extends BroadcastReceiver {
    public MySmsReceiver() {
    }

    @Override  //当接收到短信的时 触发
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.

        //如果接收到的短信的Action 等于系统 短信的intent action
        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {

            //取消广播 (这行代码会让系统收不到短信)
            abortBroadcast();

            StringBuilder sb = new StringBuilder();
            //接收由 SMS 传过来的数据
            Bundle bundle = intent.getExtras();

            //判断是否有数据
            if (bundle != null) {
                //通过 pdus 可以获得接收到的所有的短信消息
                // pdu为承载着一条短信的所有短信。
                // 一条短信为140个英文字符长度,在这个长度范围内,即需一个pdu即可。超出这个范围,即要分割成多个pdu数组。

                Object[] pdus = (Object[]) bundle.get("pdus");

                //构建短信对象数组,并依据接收到的对象长度来创建数组的大小
                SmsMessage[] messages = new SmsMessage[pdus.length];

                for (int i = 0; i < pdus.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                }

                //将发送来的短信合并成自定义信息于 StringBuilder 中
                for (SmsMessage msg : messages) {
                    sb.append("短信来源: ")
                            //获得接收短息的号码
                            .append(msg.getDisplayOriginatingAddress())
                            .append("\n-------------短信内容---------\n")
                            //获得短信息内容
                            .append(msg.getDisplayMessageBody());
                }
            }

            Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
        }

    }
}

在清单文件中配置代码如下 :



权限

你可能感兴趣的:(短信,Android)