注册BroadcastReceiver的方法
BroadcastReceiver用于监听被广播的事件(Intent)为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有两种:
1、 在应用程序的代码当中进行注册
注册BroadcastReceiver: registerReceiver(receiver, filter);
取消注册BroadcastReceiver: unregisterReceiver(receiver);
如果一个BroadcastReceiver用于更新UI,那么通常会使用这种方法进行注册,在Activity启动时修注册BroadcastReceiver,在Activity不可见以后取消注册
例如:
Private static final String SMS_ACTION = “android.provider.Telephony.SMS_RECEIVED”;
//生成一个BroadcastReceiver对象
SMSReceiver smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
//为IntentFilter添加一个Action
Filter.addAction(SMS_ACTION); //收到短信时
//将BroadcastReceiver对象注册到系统当中
TestActivity.this.registerReceiver(smsReceiver, filter);
//解除BroadcastReceiver对象的注册
TestActivity.this.unregisterReceiver(smsReceiver);
//接收Intent对象中的数据
Bundle bundle = intent.getExtras();
//在Bundle对象当中有一个属性名为pdus,这个属性的值是一个Object数组
Object[] myOBJpdus = (Object[])bundle.get(“pdus”);
//创建一个SmsMessage类型的数组
SmsMessage[] messages = new SmsMessage[myOBJpdus.length];
for( int i = 0; i < myOBJpdus.length; i ++)
{
//使用object数组当中的对象创建SmsMessage对象
messages[i] = SmsMessage.createFromPdu((byte[])myOBJpdus[i]);
//调用SmsMessage对象的getDisplayMessageBody()方法,可以得到消息的内容
System.out.println(messages[i].getDisplayMessageBody());
}
2、在AndroidManifest.xml文件中进行注册(即使应用程序已经关闭,BroadcastReceiver依然会接收到广播)、
内置的Broadcast Actions
在Android平台当中,内置了很多Action,用于帮助开发者监听手机上所发生的各种事件,一下是一些比较常见的Action,完整的Action列表可以参考:
ACTION_CAMERA_BUTTON camera Button was pressed
ACTION_BATTERY_LOW
ACTION_DATE_CHANGED
ACTION_POWER_CONNECTED
ACTION_REBOOT
ACTION_SCREEN_ON
发送广播的方法
1、调用activity的sendBroadcast(intent)方法
2、使用PendingIntent.getBroadcast(Context, int, Intent, int)获得一个PendingIntent实例,该实例将实现广播的功能。
AlarmManager.set(int type, long triggerAtTime, PendingIntent operation)
Context.sendBroadcast 當多個廣播接收器的時候,接收廣播的順序沒有保證
Context.sendOrderedBroadcast 當多個廣播接收器的時候,接收廣播的順序按註冊時IntenFilter設置的優先級來執行。
Context.sendStickyBroadcast 當多個廣播接收器的時候,接收廣播的順序沒有保證;Intent在發送后會一直存在,以后註冊的廣播接收器也會收到。