Android --- 广播机制(BroadcastReceiver应用)

BroadcastReceiver简介

BroadcastReceiver是用于接收广播的组件用于组件与组件之间进行通信,可以跨应用程序传递.如操作系统电池电量低会发送一个广播,这样我们的程序里面可以去监听这个广播,可以关闭程序里面比较耗电的功能,提示用户注意保存进度什么的,还如其它安装新应用等,还有普通应用程序,例如启动特定线程,文件下载完毕等。

Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待
广播告知自己就可以了,大大减少了开发的工作量和开发周期。
1、发送频率低的可以使用
2、数据量小在可使用

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。

下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。


首先,我们来演示一下创建一个BroadcastReceiver,并让这个BroadcastReceiver能够根据我们的需要来运行。


1、定义接收器

要创建自己的BroadcastReceiver对象,我们需要继承android.content.BroadcastReceiver,并实现其onReceive方法。下面我们就创建一个名为MyReceiver广播接收者:


public class MyReceiver extends BroadcastReceiver {

    /**
     * 当接收到消息时触发
     *
     * @param context
     * @param intent
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Toast.makeText(context, "接收到信息:" + action, Toast.LENGTH_LONG).show();
        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
            Log.e("m_tag", "====== boot complete");
        }
    }
}


2 、注册广播接收器

// 静态注册:需要在 manifest.xml 中使用 <receiver> 标签注册该接收器(常驻后台)
    <receiver android:name="com.xykj.intentandbradcast.MyReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="abc123"/>
        </intent-filter>
    </receiver>

// 动态注册:在 java 中通过 regist.. 以及 unRegist.. 进行注册和取消注册
class TestReceiver extends BroadcastReceiver{
	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		Toast.makeText(context, " 接收到消息: " + action, Toast.LENGTH_LONG).show();
	}
}
动态注册
private TestReceiver receiver;
...
receiver = new TestReceiver();
//IntentFilter 过滤器来添加接收器所需要监听的 Action
IntentFilter filter = new IntentFilter();
filter.addAction("hello");
filter.addAction(Intent.ACTION_SCREEN_ON);
// 注册广播
context.registerReceiver(receiver,filter);
取消注册
context.unregisterReceiver(receiver);

应用内部广播 ( 本地广播 )


在 support v4 包中提供了 LocalBroadcastManager 来完成应用内广播的管理,可以实现广播消息只在应用内部传递,不会传到其他应用去


注册
localReceiver = new LocalReceiver();
IntentFilter filter1 = new IntentFilter();
filter1.addAction("hello");
filter1.addAction("abc123");
LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver,filter1);

取消注册
LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver);

发送广播
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("abc123"));










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值