Android-广播接受者

来源:互联网 发布:js阻止a标签跳转 编辑:程序博客网 时间:2024/04/30 15:36

广播接收者,事实上是一种观察者模式的实现。通过对关心的事件进行订阅(通过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 stubif(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 stubif(intent.getAction().equals("com.freedie.broadcast")){Log.d("broadcast", "com.freedie.broadcast was received!");}}


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

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

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

0 0
原创粉丝点击