android_BroadcastReceiver

来源:互联网 发布:龙岳辉 大数据 编辑:程序博客网 时间:2024/06/06 02:57

BroadcastReceiver,Android四大组件之一,本质上就是一种全局的监听器,用于监听系统全局的广播消息。

程序启动BroadcastReceiver需要两步:

1.创建需要启动的BroadcastReceiver的Intent;

2.调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。


BroadcastReceiver本质上是监听器,所以实现它只要重写onReceive(Context context,Intent intent)方法即可。

接着要指定该BroadcastReceiver能匹配的Intent,有如下两种方式:

1、代码进行指定:

IntentFilter filter = new IntentFilter("com.example.android_broadcasttest.BROADCAST");MyReceiver receiver = new MyReceiver();registerReceiver(receiver,filter);
2、在manifest文件中进行配置:

<receiver  android:name="com.example.android_broadcasttest.MyReceiver">  <intent-filter>    <action android:name="com.example.android_broadcasttest.BROADCAST"/> </intent-filter></receiver>

:不要在BroadcastReceiver的onReceive()方法中执行耗时操作,否则会造成ANR。如果确实需要根据Broadcast来完成一项耗时操作,可以考虑通过Intent启动一个Service来完成需要的操作。

简单实例(最基本的用法):界面放置一个按钮用来发送广播,接收到广播之后Toast显示。

public class MainActivity extends ActionBarActivity {    private Button sendBtn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sendBtn = (Button) findViewById(R.id.send_btn);        sendBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建Intent对象Intent intent = new Intent();//设置Intent的Action属性intent.setAction("com.example.android_broadcasttest.BROADCAST");intent.putExtra("msg", "这是第一个简单的有序广播小案例~");//发送广播sendBroadcast(intent);}});         }}

public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, intent.getAction() + "------" + intent.getStringExtra("msg"), Toast.LENGTH_LONG).show();}}

<receiver  android:name="com.example.android_broadcasttest.MyReceiver">            <intent-filter >                <action android:name="com.example.android_broadcasttest.BROADCAST"/>            </intent-filter></receiver>

广播分为两种,普通广播和有序广播。

普通广播可以被所有接收者接收到,消息传递的效率比较高。缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。

有序广播的接收者按预先声明的优先级依次接收Broadcast。优先级的声明有两种方式,1,在<intent-filter>元素的android:priority属性中设置;2,代码中调用intentFilter对象的setPriority()方法进行设置(数越大,优先级越高)。有序广播可以终止Broadcast Intent的传播,一旦终止,后面的接收者将无法接收到广播。另外,有序广播接收者可以将数据传递给下一个接收者。

有序广播的发送:

sendOrderedBroadcast(intent,null);
有序广播接收者存放数据:
//创建一个Bundle对象,并存入数据Bundle bundle = new Bundle();bundle.putString("pre", "接收者的数据!");//将bundle放入结果中setResultExtras(bundle);
有序广播接收者终止广播:
abortBroadcast();
有序广播接收者解析上一个接收者所存入的数据:

Bundle bundle = getResultExtras(true);//解析前一个接收者所存入的key为“pre”的消息String result = bundle.getString("pre");

0 0
原创粉丝点击