【Android】BroadCast广播机制应用与实例

本文介绍如何在Android中创建和使用广播接收器,包括静态和动态注册的方法,以及发送广播的两种形式:普通广播和有序广播。

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

 

如何编写广播接收器

第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法. 


//匿名内部类广播接收者
private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
   
	String strAction  = intent.getAction();
		if(strAction.equals("pushAction")){
		   String str = intent.getStringExtra("push");
			L.v(TAG,"str=="+str);
		}  
    }
};

第二步:定义好广播接收器还不行,必须向系统注册以便让其知道该接收器可以处理哪些广播事件。

常见方式是采用静态注册,修改MENIFEST.xml文件, 在<application></application>中加入receiver标签.

<application>  
    <activity name=""/>  
    <receiver android:name=".MyBroadcastReceiver">  
        <!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->   
        <intent-filter>  
            <action android:name="pushAction"/>  
        </intent-filter>  
    </receiver>  
</application>  

动态注册广播接收器

在某个Activity中,我们可以用代码来实现动态注册:

//生成一个BroadcastReceiver对象,SMSReceiver  继承BroadCast或者写成匿名内部类广播接收
SMSReceiver  smsReceiver = new SMSReceiver();  
//生成一个IntentFilter对象  
IntentFilter filter = new IntentFilter();         
filter.addAction(“pushAction”);  
//将BroadcastReceiver对象注册到系统当中  
//此处表示该接收器会处理短信事件  
TestBC1Activity.this.registerReceiver(smsReceiver, filter); 


第三步:此时我们可以发送一个广播事件出去,代码如下:

 

Intent intent = new Intent();  
intent.setAction("pushAction");
intent.putExtra("push", "pushhide");
sendBroadcast(intent);//发送广播事件  

 

静态注册和动态注册的区别

1)静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。
2)动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。

应用实例

 

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class BroadCastActivity1 extends Activity{
	Intent intent = new Intent();
	//new 一个广播对象
	BroadCastTest1 bCastTest1 = new BroadCastTest1();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);
		//发送广播
		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub、
				//参数是bc.test101才可以接收,接收的内容是静态的
				intent.setAction("bc.test102");
				intent.putExtra("name", "静态的");
				sendBroadcast(intent);
//              sendOrderedBroadcast(intent, null);
			}
		});

		//动态注册
		findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				IntentFilter intentFilter = new IntentFilter();
				intentFilter.addAction("bc.test102");
				//直接指出是注册到BroadCastTest1这个类里面
				BroadCastActivity1.this.registerReceiver(bCastTest1, intentFilter);
				//设置一些参数,参数是bc.test102才可以接收,接收的内容是静态的
				
			}
		});

		findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				unregisterReceiver(bCastTest1);
				finish();
			}
		});
	}
}

 

广播的优先级:

1.发送广播的形式
sendBroadcast():发送普通广播。
sendOrderedBroadcast():发送有序广播。
以上两个方法都有多个重载方法,根据不同的场景使用,最简单的莫过于直接传递一个Intent来发送一个广播。
2.优先级 (android:priority)
在代码中使用Content.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)进行注册,在使用完毕使用Content.unregisterReceiver(BroadcastReceiver receiver)方法进行注销。
使用清单文件AndroidManifest.xml注册,在<application/>节点中,使用<receiver/>节点注册,并用android:name属性中指定注册的BroadcastReceiver对象,
一般还会通过<Intent-filter/>指定<action/>和<category/>,并在<Intent-filter/>节点中通过android:priority属性设置BroadcastReceiver的优先级,在-1000~1000范围内,数值越到优先级越高。
   虽然Android系统提供了两种方式注册BroadcastReceiver,但是一般在实际开发中,还是会使用清单文件进行注册: 
        <receiver android:name="cn.bgxt.Broadcastdemo.Basic.BasicBroadcast">
            <intent-filter android:priority="100">
                <action android:name="cn.bgxt.Broadcastdemo.Basic.broadcast"/>
             </intent-filter>            
        </receiver>

 

demo地址 http://download.youkuaiyun.com/detail/qq_26296197/9483636

扩展 https://www.jianshu.com/p/f348f6d7fe59

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值