短信提醒 BroadcastReceiver

当系统短信时,会对外发送一个广播,该广播的Intent的action 为 <action android:name="android.provider.Telephony.SMS_RECEIVED".因此只要在程序中开发一个对应的 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();
        }

    }
}

在清单文件中配置代码如下 : <intent-filter android:priority="1000">
<action android:name="com.test.systembroadcast.SMG" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>

权限 <uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值