Android中的广播机制(二)----- 发送广播

来源:互联网 发布:cg制作软件 编辑:程序博客网 时间:2024/04/27 15:09

这一篇中我们将介绍发送标准广播,有序广播和本地广播的使用。

一、 发送标准有序广播


1 . 定义一个广播接收器(静态注册)。新建类继承自BroadcastReceiver,同时在AndroidManifest.xml文件中对广播进行注册。

public class MyBroadcastReceiver  extends BroadcastReceiver{    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "Receiver", Toast.LENGTH_SHORT).show();    }}

在AndroidManifest.xml文件中添加如下代码:

<receiver android:name=".receiver.MyBroadcastReceiver">            <intent-filter>                <action android:name="com.codekong.broadcastreceiver"/>            </intent-filter>        </receiver>

2 . 构建要发送的广播,并发送。(此处通过点击按钮来触发发送广播)

Button btnSend = (Button) findViewById(R.id.btn_send);        btnSend.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent("com.codekong.broadcastreceiver");                //发送标准广播                sendBroadcast(intent);            }        });

可以看出,我们是通过构造一个隐式intent,然后调用sendBroadcast()方法来发出一条标准广播。
注意:此处构建的Intent中的内容,要和AndroidManifest中静态注册的receiver中的action的值保持一致,这样才能接收到发出的广播。


二、 发送有序广播

发送标准广播使用sendBroadcast()方法,发送有序广播使用sendOrderBroadcast(intent, null)方法。

为了确定哪个应用程序先收到广播,我们还需要规定优先级,在AndroidManifest.xml文件中,修改receiver的优先级(此处设置为100)。

<receiver android:name=".receiver.MyBroadcastReceiver">            <intent-filter android:priority="100">                <action android:name="com.codekong.broadcastreceiver"/>            </intent-filter>        </receiver>

由于是有序广播,我们还可以在收到广播后截断广播,使其终止传递。
截断广播使用abortBroadcast()方法。


三、 使用本地广播


前面我们学习的广播都是系统全局广播,发出的广播,其他应用程序也可以接收到为了解决广播的安全性问题,我们引入了本地广播机制,使用该机制发出的广播只会在应用程序内部传播,而且广播接收器也只会接受来自本应用程序的广播。

1 . 新建内部类继承自BroadcastReceiver实现广播接收器,并重写其中的方法。

class LocalReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            Toast.makeText(context, "Receiver", Toast.LENGTH_SHORT).show();        }    }

2 . 获得本地广播管理器实例

//获取到实例        localBroadcastManager =LocalBroadcastManager.getInstance(this);

3 . 构建intent,发送广播

Button btnSend = (Button) findViewById(R.id.btn_send);        btnSend.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent("com.codekong.LOCAL_BROADCAST");                localBroadcastManager.sendBroadcast(intent);            }        });

4 . 动态注册本地广播监听器。

IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("com.codekong.LOCAL_BROADCAST");        localReceiver = new LocalReceiver();        localBroadcastManager.registerReceiver(localReceiver, intentFilter);

5 . 在onDestroy()方法中取消注册的广播。

localBroadcastManager.unregisterReceiver(localReceiver);

注:本地广播是无法通过静态注册的方方法来接收的,因为静态注册主要是为了可以在不启动程序的前提下也能接受到广播,而本地广播只能在应用程序内部进行广播。

0 0
原创粉丝点击