1min了解广播(3)-发送自定义广播

来源:互联网 发布:在线网页制作软件 编辑:程序博客网 时间:2024/04/29 02:12

今天我们一起来学习一下如何在应用程序中发生自定义的广播,前面已经介绍过了,广播主要分为两种类型,标准广播和有序广播,在本节中我们就将通过实践的方式来看下这两种广播具体的区别。

发送标准广播
在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发出去也是白发。因此新建一个MyBroadcastReceiver 继承自BroadcastReceiver,代码如下所示:

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;/** * Created by 权兴权意 on 2016/9/27. */public class MyBroadcastReceiver extends BroadcastReceiver {    @Override   public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"Received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();    }}

这里当MyBroadcastReceiver 收到自定义的广播时,就会弹出Received in MyBroadcastReceiver的提示。然后在AndroidManifest.xml 中对这个广播接收器进行注册:

        <receiver android:name=".MyBroadcastReceiver">            <intent-filter>                <action android:name="com.quan.car.mybroadcast.MY_BROADCAST"/>            </intent-filter>        </receiver>


可以看到, 这里让MyBroadcastReceiver 接收一条值为com.quan.car.broadcasttest.MY_BROADCAST 的广播,因此待会儿在发送广播的时候,我们就需要发出这样的一条广播。
接下来修改activity_main.xml 中的代码,添加一个Button按钮作为发送广播的触发点,如下所示:

    <Button        android:id="@+id/mybr_btn_main"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="MyBroadcastReceiver"        />


然后修改MainActivity中的代码,如下所示:
        mybr_btn_main = (Button) findViewById(R.id.mybr_btn_main);        mybr_btn_main.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                sendBroadcast(new Intent("com.quan.car.mybroadcast.MY_BROADCAST"));            }        });

可以看到,我们在按钮的点击事件里面加入了发送自定义广播的逻辑。首先构建出了一个Intent 对象,并把要发送的广播的值传入,然后调用了Context 的sendBroadcast()方法将广播发送出去,这样所有监听MY_BROADCAST 这条广播的广播接收器就会收到消息。此时发出去的广播就是一条标准广播。

运行程序点击Button即可看到效果:


广播是一种可以跨进程的通信方式,这一点从前面接收系统广播的时候就可以看出来了。因此在我们应用程序内发出的广播,其他的应用程序应该也是可以收到的。


发送有序广播

不过到目前为止,程序里发出的都还是标准广播,我们还可以尝试一下发送有序广播。

发送有序广播只需要改动一行代码, 即将sendBroadcast() 方法改成sendOrderedBroadcast()方法。sendOrderedBroadcast()方法接收两个参数,第一个参数仍然是Intent,第二个参数是一个与权限相关的字符串,这里传入null 就行了。

这个时候的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。
那么该如何设定广播接收器的先后顺序呢?当然是在注册的时候进行设定的了,修改AndroidManifest.xml 中的代码,如下所示:

android:priority="100"

我们通过android:priority 属性给广播接收器设置了优先级,优先级比较高的广播接收器就可以先收到广播。

既然已经获得了接收广播的优先权,那么就可以选择是否允许广播继续传递了。如果在onReceive()方法中调用了abortBroadcast()方法,就表示将这条广播截断,后面的广播接收器将无法再接收到这条广播。



0 0
原创粉丝点击