——- android培训、java培训、期待与您交流! ———-
广播接收者,在android系统中有各种各样的广播,比如来电,短信的接受发送,电池电量的变化都会发送广播,我可以监听这些广播来执行自己的应用程序,从而达到我需要目的。广播接收者没有界面,但是我们可以通过广播接收者启动一个activity来达到通知用户的目的。和activity一样,广播接收者需要在清单文件中注册,才能使用。manifest文件中
<receiver android:name="com.qzd.mobilesafe.receiver.BootCompleteReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/><!-- 手机开机启动动作 --> </intent-filter> </receiver>
如上就注册了一个接受手机开机的时候广播的广播接收者,来监听这一事件。
广播分为几种类型:
普通广播,通过Context.sendBroadcast(Intent myIntent)发送的
有序广播,通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;广播接收者接收广播时的级别级别(可通过intentfilter中的priority进行设置设为2147483647时优先级最高),同级别接收的先后是随机的, 再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播,还有其他构造函数
异步广播,通过Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要:
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉。
public class BootCompleteReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { } }
写一个继承BroadCastReceiver的类,重写onReceive()方法,广播接收器仅在它执行这个方法时处于活跃状态。
注册广播接收者的方式有两种,一种是在清单文件注册还有一种是在代码里面进行动态注册
`
receiver = new InnerSmsReceiver();
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(receiver,filter);
写上要监听的意图。用Unregister来注销掉。广播接收者生命周期只有十秒左右,动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用`