Broadcast详解:有序广播

来源:互联网 发布:mac修容粉怎么用 编辑:程序博客网 时间:2024/06/06 22:31

以下是今天晚上学习的BroadcsatReceiver的有序广播的Demo

首先讲解一下:有序广播:orderBroadcast既然是有序的就涉及到几个广播接收器的先后顺序,我们Demo中创建两个Receiver的实例

首先在第一个广播接收器下我们声明接收器的优先权:android:priority:100以此来保证此接收器的第一接受优先权;第一个实例 如下:


public class MyBroadcastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "在MyBroadcastReceicer中收到广播",                Toast.LENGTH_SHORT).show();        //abortBroadcast方法是截断该广播接收器的接受,在注册清单文件中我们注册了次接收器的优先权        // 所以在此之后的广播接收器已经不能接受到发出的广播了        abortBroadcast();            }}

下面是Andorramainfest.xml的关键代码来注册该接收器

<receiver android:name=".MyBroadcastReceiver"    android:enabled="true"    android:exported="true">    <!--android:priroty设置有序广播的优先级别-->    <intent-filter android:priority="100">        <action android:name="com.example.shanshui.networkreceiver.MY_BROADCAST"/>    </intent-filter></receiver>


在这之后我们在此Demo中添加一个Button来承载广播的发送,具体代码如下

        Button btn= (Button) findViewById(R.id.button);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new                        Intent("com.example.shanshui.networkreceiver.MY_BROADCAST");                //修改为有序广播只用这一行代码:                sendOrderedBroadcast(intent,null);//                sendBroadcast(intent);            }        });


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




以下是第二个广播接收器的Demo

package com.example.shanshui.braodcastbemo2;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class AnotherBroadcstReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // TODO: This method is called when the BroadcastReceiver is receiving        // an Intent broadcast.        Toast.makeText(context, "在AnotherBroadCast中接收到广播啦!",                Toast.LENGTH_SHORT).show();    }}


同样的步骤也是需要给接收器在Androidmainfest.xml注册接收属性

<receiver    android:name=".AnotherBroadcstReceiver"    android:enabled="true"    android:exported="true">    <intent-filter>        <action android:name="com.example.shanshui.networkreceiver.MY_BROADCAST"/>    </intent-filter></receiver>

这样启动两个活动后,,由于第一个广播接收器设置了order的优先级别,且调用了abortBroadcast()方法,因此在这之后的receiver就被截断了


总结:Anddroid的广播机制很强大,也是安卓开发中的要点,在这节内容中我们接触到了权限;permission的概念:涉及到用户隐私与权限的时候,必须声明权限:否则程序启动就会报错!


原创粉丝点击