自定义广播

  • 发送标准广播

  • 发送有序广播

  • 有序广播的先后顺序(在注册广播接收器时,通过过滤器的priority属性设置优先级

  • 截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播

注意,要保证截断广播,需保证自己优先级高,先接收了此有序广播

  • 本地广播(只有动态注册)

发送广播,利用Intent进行传递

接收广播,就是广播接收器(BroadcastReceiver)(如何注册请看:BroadcastReceiver广播接收器动态注册、静态注册

  • 发送标准广播:

1. 基本思路:

①:借助Intent传入自定义广播的action值,再由context的sendBroadcast(intent)发送标准广播

②:然后就是注册一个BroadCastReceiver,接收这个广播(注册方法:BroadcastReceiver广播接收器动态注册、静态注册

2. 简单代码:

①:这里将发送广播的代码写在了按钮里,点击按钮发送广播:

Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过Intent传递广播,参数为传入要发送的自定义广播的值
                Intent intent=new Intent("com.example.broadcast.MY_BROADCAST");
                sendBroadcast(intent);//通过context的sendBroadcast发送(标准)广播
            }
        });

②注册:这里用了静态注册(即在AndroidMainfest.xml文件中用<receiver></receiver>注册)

<receiver
            android:enabled="true"
            android:exported="true"
            android:name=".StandardBroadcastReceiver">
            <intent-filter ><action android:name="com.example.broadcast.MY_BROADCAST"/> </intent-filter>
 </receiver>
  • 发送有序广播

1. 基本思路:

①:借助Intent传入自定义广播的action值,再由context的sendOrderedBroadcast(intent  , 权限)发送有序广播

②:然后就是注册一个BroadCastReceiver,接收这个广播(注册方法:BroadcastReceiver广播接收器动态注册、静态注册

2. 简单代码:

①:这里将发送广播的代码写在了按钮里,点击按钮发送有序广播广播:

Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过Intent传递广播,参数为传入要发送的自定义广播的值
                Intent intent=new Intent("com.example.broadcast.MY_BROADCAST");
                sendOrderedBroadcast(intent,null);//通过context的sendOrderedBroadcast发送(有序)广播
            }
        });

②注册:

  • 定义广播接收器类,继承BroadcastReceiver,并重写onReceive()

如要,截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播)

public class OrderBroadcastReceiver 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,"received in OrderBroadcastReceiver",Toast.LENGTH_SHORT).show();

        /*******************************/
        //截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播

        abortBroadcast();//截断广播
    }
}
  • 这里用了静态注册(即在AndroidMainfest.xml文件中用<receiver></receiver>注册):
<receiver
            android:name=".OrderBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter><action android:name="com.example.broadcast.MY_BROADCAST"/></intent-filter>
</receiver>

如要,设置有序广播接收顺序,在注册广播接收器时,设置本接收器的priority优先级即可

修改:

<receiver
            android:name=".OrderBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter Android:priority="具体优先级">
                <action android:name="com.example.broadcast.MY_BROADCAST"/>
            </intent-filter>
</receiver>
  • 本地广播:(接收器只有动态注册,所以要注销)

本地广播,可以使得发出的广播,只能在本程序内部进行传递,不会被外部接收器接收

且,本程序的广播接收器也只能接收本程序内部的广播,不能接收外部的

  • 基本思路:

本地广播,使用LocalBroadcastManager类来对广播进行管理,并提供了,

发送广播的方法LocalBroadcastManager manager.sendBroadcast(intent),来发送本地广播

注册广播接收器的方法:LocalBroadcastManager manager.registerReceiver(自定义接收器类实例,intentFilter过滤器)

注销广播接收器:LocalBroadcastManager manager.unregisterReceiver(自定义接收器类实例)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值