Broadcast详解:有序广播

以下是今天晚上学习的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的关键代码来注册该接收器

android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    
    android:priority="100">
        android:name="com.example.shanshui.networkreceiver.MY_BROADCAST"/>
    


在这之后我们在此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注册接收属性

    android:name=".AnotherBroadcstReceiver"
    android:enabled="true"
    android:exported="true">
    
        android:name="com.example.shanshui.networkreceiver.MY_BROADCAST"/>
    

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


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


你可能感兴趣的:(安卓移动开发)