Broadcast Receiver

Broadcast Receiver 用于异步接收广播的Intent,主要有两大类:


1.正常广播(Normal Broadcast)用Context.sendBroadcast()发送的.是完全异步的.通常系统里注册的广播接收者(receiver)会在同一时间收到广播(Broadcast),这样做的效率更高,但意味着接收者(receiver)不能终止广播的传递(如win32的Hook抛弃参数,不在向下调用).


2.有序广播(Ordered Broadcast)用Context.sendOrderedBroadcast()发送的.每次被发送到一个receiver,receiver可以终止广播的传递,不在向下传播,receiver的接收顺序可以通过<intent-filter>里面的android:priority来控制,当几个receiver的priority优先级相同时,receiver以任意的顺序运行.


要注意的是,即使是Normal Broadcast,系统在某些情况下可能也会一次只传播给一个receiver,特别是receiver可能需要创建一个进程,为了避免系统超载,只能一次运行一个receiver.


BroadcastReceiver的生命周期
一个receiver对象只有被调用onReceiver(Context,Intent)时才是有效的,从该函数返回后,该对象就无效了,结束生命周期.


onReceiver函数里,不能有过于耗时的操作>>>


发送广播


构建一个Intent对象,通过sendBroadcast(Intent)\sendOrderedBroadcast()\sendSickyBroadcast()将广播发出.




广播的接收


通过定义一个继承自BroadcastReceiver的类来实现,复写其onReceiver方法,在该方法里可以编程.


注册Receiver


1.静态方式,在AndroidManifest.xml的application标签里定义receiver标签,并设置要接收的action


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


2.动态方式,在activity里面调用函数来注册,
protected void onStart(){
super.onstart();
receiver = new CallReceiver();
registerReceiver(MyReceiver, new IntentFilter("android.intent.action.PHONE_STATE"));
}
protected void onStop(){
unregisterReceiver(MyTeceiver);
}
一般在activity的onStart()里进行注册,在onStop里进行注销,官方提请,如果在onResume()里面注册了,就必须在onPause()注销


Permission权限
要接收某些action,需要在AndroidManifest.xml里面添加相应的permission
收SMS:
<user-permission android:name="android.permission.REcEIVE_SMS" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值