广播机制(一)

本文介绍了Android中的BroadcastReceiver组件,详细解释了其工作原理、生命周期及两种注册方式:静态注册和动态注册。通过实例展示了如何创建和使用广播接收器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值