广播分类

广播分为有序广播和无序广播

  • 有序广播
    所有与广播中的action匹配的广播接收者都可以收到这条广播,但是是有先后顺序的,按照广播接收者的优先级排序.
  • 无序广播
    所有与广播中的action匹配的广播接收者都可以收到这条广播,并且是没有先后顺序的,视为同时收到
有序广播
  • sendOrderedBroadcast发送
  • 可以添加最终广播接收者,最终广播接收者resultReceiver:不需要在清单文件中配置,这个广播接收者只接收该条有序广播,并且是最后一个收到该广播,并且一定可以接收到,即便被拦截
发出广播
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v) {
        Intent intent = new Intent();
        intent.setAction("orderlyBroadcast");

        //发送有序广播
        //sendOrderedBroadcast(intent, null, null, null, 0, "每人发100W", null);

        //最终广播接收者resultReceiver:不需要在清单文件中配置,这个广播接收者只接收该条有序广播,并且是最后一个收到该广播,并且一定可以接收到,即便被拦截
        sendOrderedBroadcast(intent, null, new MyResultReceiver(), null, 0, "每人发100W", null);
    }

    class MyResultReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String str = getResultData();
            System.out.println("最终结果:" + str);
        }
    }
}
接收者
  • 优先级 android:priority="300" 范围-1000 至 1000 1000为最高
  • 阻止广播 abortBroadcast(),对于最终接收者来说,无效.
<receiver
    android:name=".LevelOneReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="1000">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>

<receiver
    android:name=".LevelTwoReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="600">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>

<receiver
    android:name=".LevelThreeReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="300">
        <action android:name="orderlyBroadcast"></action>
    </intent-filter>
</receiver>
public class LevelOneReceiver extends BroadcastReceiver {
    public LevelOneReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL ONE:" + str);

        //修改广播内容
        setResultData("每人发80W");
    }
}
public class LevelTwoReceiver extends BroadcastReceiver {
    public LevelTwoReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL TWO:" + str);
        //阻止广播后,优先级低的则收不到了,但最终广播接收者一定会收到.
        abortBroadcast();
    }
}
public class LevelThreeReceiver extends BroadcastReceiver {
    public LevelThreeReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = getResultData().toString();
        System.out.println("LEVEL THREE:" + str);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 现实中的广播:电台为了传达一些消息而发送广播,通过广播携带要传达的消息,群众只要买一个收音机,就可以收到广播了。 ...
    stevewang阅读 4,324评论 0 8
  • 广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...
    Lost_Robot阅读 1,992评论 2 10
  • 使用Android手机的时候,我们的手机管家中经常会出现开机自启动某某app,那么对于这个某某APP来说,他是怎么...
    徐爱卿阅读 6,046评论 8 14
  • 广播(掌握) 广播的概念现实:电台通过发送广播发布消息,买个收音机,就能收听Android:系统在产生某个事件时发...
    法神赵日天阅读 401评论 0 2
  • 今天有点累。 我从不承认自己是个愤青,我一度是一个喜欢置身事外的不负责任的人,后来我将这种心态归结为幼稚和自欺欺人...
    短鱼阅读 216评论 1 2