Broadcast Receiver:
广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组建级别,而广播事件处理机制是系统级别,广播机制的特点是:发送方并不关心接收方是否接收了数据,也不关心接收方是如何处理数据的,开发广播接收器并将广播接收器对象注册到Android操作系统中,当一个事件产生时,Android操作系统就会通知这些BroadCastReceiver,BroadCastReveiver首先判断这个事件是否是我们需要的事件,因为不同的广播可能处理不同的事件,如果是我们需要的事件则会创建一个BroadCastReceiver对象,并调用onReceive()方法
Broadcast Receiver的生命周期:
Broadcast Receiver对象仅在onReceiver()是有效,当改方法执行完毕后,系统会销毁该对象(即onReceiver()调用后,改对象就不存在了)
注册BroadCastReceiver的方法:
(一)在AndroidManifest.xml文件中进行注册(与Actiivty无关,不会因为Actiivty被销毁而不存在,BroadCastReceiver会一直存在)
a.编写类继承BroadCastReceiver,复写onReceiver()方法
b.在AndroidManifest.xml中注册BroadCastReceiver
c.构建intent对象
d.调用sendBroadcast()方法发送广播
1、布局文件中显示一个Button
<Button
android:id="@+id/sendButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/sendButton" />
2、BroadCastActivity.java文件中
sendButton=(Button)this.findViewById(R.id.sendButton);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setAction(Intent.ACTION_EDIT);
BroadCastActivity.this.sendBroadcast(intent);
sendButton.setText("aa");
}
});
3.BoardReceive.java文件中
public BoardReceice()
{
System.out.println("BoardReceice");
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
System.out.println("onReceive");
}
4.在AndroidMainfest.xml中进行配置
<receiver android:name=".BoardReceice">
<intent-filter>
<action android:name="android.intent.action.EDIT"></action>
</intent-filter>
</receiver>
打印结果(单击两次):
(二)在应用程序的代码中进行注册
a.注册BroadcastReceiver
registerReceiver();
b.取消注册
unregisterReceiver()
1.创建一个SMSReceiver.java的类,内容如下:
package wei.cao.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class SMSReceiver extends BroadcastReceiver{
public SMSReceiver() {
System.out.println("SMSReceiver()");
}
@Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("onReceive()");
//接受Intent对象当中的数据
Bundle bundle=arg1.getExtras();
//在Bundle对象当中有一个属性名为pdus,这个属性值是一个Object数组
Object[] myOBJpdus=(Object[])bundle.get("pdus");
//创建一个SmsMessage类型的数组
SmsMessage[] message=new SmsMessage[myOBJpdus.length];
for (int i = 0; i < myOBJpdus.length; i++) {
//使用Object数组当中的对象创建SmsMessage对象
message[i]=SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);
//调用SmsMessage对象的getDisplayMessageBody()方法,就可以得到消息的内容
System.out.println(message[i].getDisplayMessageBody());
}
}
}
2.新建一个Activity:BroadCastActivity.java,内容如下:
package wei.cao.broadcast;
import wei.cao.boardcast.R;
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class BroadCastActivity extends Activity {
/** Called when the activity is first created. */
private Button registerReceiver=null;
private Button unRegisterReceiver=null;
SMSReceiver receiver=null;
private static String SMS_ACTION="android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerReceiver=(Button)this.findViewById(R.id.registerReceiver);
unRegisterReceiver=(Button)this.findViewById(R.id.unRegisterReceiver);
registerReceiver.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
//生成一个BroadcastReceiver对象
receiver=new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter intentFilter=new IntentFilter();
//为Intent对象添加Action
intentFilter.addAction(SMS_ACTION);
//将BroadCastReceiver注册到系统当中
BroadCastActivity.this.registerReceiver(receiver, intentFilter);
}
});
unRegisterReceiver.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
//解除BroadCastReceiver对象的注册
BroadCastActivity.this.unregisterReceiver(receiver);
}
});
}
}
3.运行结果