代码中解析短信——BroadCastReceiver应用举例

来源:互联网 发布:乐高ev3编程软件教育版 编辑:程序博客网 时间:2024/05/16 10:58

BroadCastReceiver是四大组件之一,用处自不比说,用个小demo举例说明。

系统创建广播时,把短信存放到一个数组,然后把数据以pdus为key存入bundle,再把bundle存入intent,注册一个广播接收者,

manifest注册如下

<receiver android:name=".SmSreceiver">            <intent-filter android:priority="214748364">                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>            </intent-filter>        </receiver>

写一个SmsBroadcastReceiver继承BroadcastReceiver,解析短信内容

public class SmSreceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Bundle extras = intent.getExtras();        Object [] objs = (Object[]) extras.get("pdus");        for (Object obj:objs){            byte[] smsBytes= (byte[]) obj;            SmsMessage msg = SmsMessage.createFromPdu(smsBytes);            String body = msg.getMessageBody();//此即为短信内容        }    }}


拨打电话,开机,电池电量低,网络断开,屏幕解锁,应用安装卸载,SD卡装载卸载 都会发出广播,当一条广播被发送出来时,系统是在所有清单文件中遍历,通过匹配意图过滤器找到能接收这条广播的广播接收者

广播分两种类型,

1.无需广播,所有跟广播的intent匹配都可以接受度奥该广播,没有先后顺序,

2、有序广播,按照广播接受者的优先级决定接收的先后顺序,优先级高德可以向优先级低的传递信息。可以被拦截…………


两种注册方式区别:

1、动态注册不是常驻型广播,广播接受者随activity生命周期。onDestroy方法里需要unregister,静态注册是常驻型,即使程序关闭,如果有广播传来,也会被系统自动运行。

2、广播为有序广播时,同优先级的广播接受者,动态优于静态

3、同优先级的同类广播接受者,先扫描的优先于后扫描的,先注册的优先于后注册的。






0 0
原创粉丝点击