Android-广播接受者

广播接收者,事实上是一种观察者模式的实现。通过对关心的事件进行订阅(通过Intent-Filter来过滤意图),当关心事件发生时(广播一个意图),会自动回调广播接受者的onReceive()方法。广播接受者自身没有图形化的显示界面,通常会在onReceive()方法里启动一个Activity或者通过NotificationManager来提醒用户。以下是使用方法:

1、  广播接收者作为android四大组件之一,必须进行注册,注册的方式有两种,一种是静态方式,即在清单文件中注册。二是动态方式,通常在Activity中进行注册。

静态注册:

<receiver android:name="com.example.broadcasttest.MyBroadcastReceiver">
          <intent-filter>
              <action android:name="com.com.freedie.broadcast"/>
          </intent-filter>
</receiver>


这种方式的特点是,不管当前应用是否启动,都能接受广播。

动态注册:一般在onResume()方法中注册,在onPause()方法中注销。

	public void onResume(){
		super.onResume();
		receiver=new MyBroadcastReceiver();
		IntentFilter filter=new IntentFilter();
		filter.addAction("com.freedie.broadcast");
		this.registerReceiver(receiver, filter);
	}
	
	public void onStop(){
		super.onStop();
		this.unregisterReceiver(receiver);
	}


2、  在应用中发起广播,该广播的action与注册的关心事件的动作相同

public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v.getId()==R.id.button1){
			Log.d("broadcast", "send intent");
			Intent intent=new Intent();
			intent.setAction("com.freedie.broadcast");
			this.sendBroadcast(intent);
		}
		
	}

3、  编写Receiver的回调方法onReceive()

public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		if(intent.getAction().equals("com.freedie.broadcast")){
			Log.d("broadcast", "com.freedie.broadcast was received!");
		}
	}


实际上,receiver可以接受两类广播。

1.      Normal Broadcast这类广播由sendBroadcast(intent)发出。接受者接受该类广播的顺序是不定的,通常是同时接受。这意味着效率高,但是接受者不能将处理结果进行传递,也不能终止广播。

2.      Ordered Broadcast这类广播由sendOrderedBroadcast发出。每个时刻只有一个接受者接受该广播,处理完了以后传递给下一个广播。接受的顺序,按照优先级来确定,优先级相同时顺序随机。这种广播可以传递处理结果,还可以随意终止广播。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值