android_广播的分类

本文介绍了Android中的两种广播类型:有序广播和无序广播。有序广播接收者有顺序,并能修改广播内容甚至终止广播;无序广播则接收无顺序,无法修改内容。文中通过代码示例展示了如何发送和监听这两种广播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android中的广播分为2类:有序广播和无须广播

有序广播

广播接收者收到广播有先后顺序之分,到底谁先睡后,由优先级别来指定, 优先级别高的广播接收者可以修改广播的内容,甚至是终止广播的继续传输。 有点类似: 中央文件层层下发

无序广播

广播接收者收到广播没有顺序之分,大家都是同时收到,也就谈不上修改内容与终止广播 .
有点类似晚上的7点钟节目《新闻联播》

代码演示如何发送一个无须的广播


public class MainActivity extends Activity {

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

    public void click(View v){
        //启动界面 startActivity
        //发送广播 sendBroadcast

        Intent intent = new Intent();

        intent.setAction("com.itheima.cctv.action.NEWS");   
        intent.putExtra("data", "我是一个无须的广播");
        sendBroadcast(intent);  
    }
}

上面的代码就可以发送出去一个无须的广播.既然无须广播已经发送出去了,
那么我们怎么监听呢?
代码演示如何监听自己的发送的广播
其实和监听系统的广播是一样的.

public class CctvReceiver extends BroadcastReceiver {

    private static final String TAG = "CctvReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        String data = intent.getStringExtra("data");
        Log.d(TAG, "data==="+data);
    }

}
      <receiver android:name="com.itheima.cctv.CctvReceiver">
            <intent-filter >
            <!--这里监听的广播就是上面发送广播设置的intent.setAction("com.itheima.cctv.action.NEWS");-->
                <action android:name="com.itheima.cctv.action.NEWS"/>
            </intent-filter>
        </receiver>

代码演示如何发送一个有序广播


public class MainActivity extends Activity {

    @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("com.itheima.gov.action.POTATO");


        //发送有序广播
        sendOrderedBroadcast(
                intent,  //意图对象
                null, //指定接收的权限, null ,无需权限也能收到广播
                new MyReceiver(),  // 最终结果接收者 1. 不用注册也可以, 2. 最终广播将会到达这里,即使中途有人终止了,也能收到。
                null, //handler  
                1,  //初始代码 code
                "主席讲话:每人奖励10斤土豆",  //初始数据
                null); //额外的数据
    }
}
public class ShengReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("vivi", "我是省级部门,我收到的指令是:"+getResultData());
        //getResultData()是用来获取有序广播里面的数值.这里的信息是:
        //主席讲话:每人奖励10斤土豆


        setResultData("主席讲话:每人奖励7斤土豆");//有序广播的数值,可以被修改,后面的程序在接受到这个广播,就会变成,现在我们改变的值了

        //有序广播传输是可以终止的.但是最终的接受者就算在终止之后,也是可以接受到数据的
        //abortBroadcast();
    }
}
public class ShiReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("vivi", "我是市级部门,我收到的指令是:"+getResultData());
    //因为上面修改了数据,所以这里获取到的数据是:主席讲话:每人奖励7斤土豆
    }

}
<!--有序广播的优先级别使用 android:priority=""来指定,最高是1000,最低是-1000-->
        <receiver android:name="com.itheima.region.ShengReceiver">
            <intent-filter android:priority="1000">
                <action android:name="com.itheima.gov.action.POTATO"/>
            </intent-filter>
        </receiver>

        <receiver android:name="com.itheima.region.ShiReceiver">
           <intent-filter android:priority="500">
                <action android:name="com.itheima.gov.action.POTATO"/>
            </intent-filter>
        </receiver>

最终接受者


public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("vivi", "我是恩恩主席的内线,我收到的指令是:"+getResultData());
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值