广播机制(一)

来源:互联网 发布:返利淘宝网红包怎么用 编辑:程序博客网 时间:2024/06/07 13:35

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()");}@Overridepublic 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对象添加ActionintentFilter.addAction(SMS_ACTION);//将BroadCastReceiver注册到系统当中BroadCastActivity.this.registerReceiver(receiver, intentFilter); }                });        unRegisterReceiver.setOnClickListener(new OnClickListener(){public void onClick(View arg0) {//解除BroadCastReceiver对象的注册BroadCastActivity.this.unregisterReceiver(receiver); }                 });           }}

3.运行结果