Android 发送自定义广播

在发送广播之前,我们还需要先定义一个广播接收器来准备接收这个广播,因此新建一个MyBroadcastReceiver,如下:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.w("MyBroadcastReceiver","reecived MyBroadcastReceiver");
    }
}
当接收到自定义广播的时候,就会打印这条log,然后就要在清单文件中对这个广播接收器进行修改:
        <receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        
        <receiver android:name=".MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.doyoulove.MY_RECEIVER" />
            </intent-filter>
        </receiver>
    </application>

上面的 广播接收器是静态注册的,与自定义广播接受者非常类似,不要忘了注意权限的问题
可以看到,这里让MyBroadcastReceiver接收一条名为"com.doyoulove.MY_RECEIVER"的广播,所以发送广播时,我们就需要发送这样的一条广播。
 可以将发送广播添加到某一个按钮之类的点击事件中,
Intent intent=new Intent("com.doyoulove.MY_RECEIVER");
                sendBroadcast(intent);
这样所有监听这条广播的广播接收者都会收到消息,此时发出去的广播就是一条标准广播。同时可以在intent中携带一些数据传递给广播接收者。
广播是一种可以跨进程的通信方式,这一点从接收系统广播就能看出来,因此我们应用发出的广播,其他应用也是可以收到的。
然后就要说一下有序广播:
只需要将 sendBroadcast 方法改成sendOrderedBroadcast方法,该方法接受两个参数,第一个参数,仍然是intent,第二个参数是一个与权限相关的字符串(传入null亦可)。此时的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。
要在清单文件中注册的时候设定广播接收器的先后顺序,如下
 <receiver
            android:name=".MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="com.doyoulove.MY_RECEIVER" />
            </intent-filter>
        </receiver>
    </application>
通过android:priority来设置优先级,优先级越高越早接收到广播。如果在广播接收器的onReceive方法中调用了abortBroadcast方法,就表示将这条广播截断,后面的广播接收器将无法接受到这条广播。
   
温馨提示:不要在广播的onReceive()里面添加过多的逻辑或者耗时操作,因为在广播接收器中是不允许开启线程,当onReceive方法运行较长时间而没有结束,程序就会报错,因此广播接收器更多的是扮演一种打开程序其他组件的角色 比如启动一个服务,创建一条状态栏通知等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值