broadcast广播-Android

来源:互联网 发布:网络教育的学费多少 编辑:程序博客网 时间:2024/06/06 07:23

本文导读:

讲解广播的基本概念和广播的用法
讲解结合了正在开发的智能家居app端代码讲解

Broadcast

广播类似于现实中的广播,只在乎是否将消息发送出去。而关心是否接受的在于接收器的相关内容。
广播有一个特点:在耗时超过10s多的时候是会报错的。因为系统不允许广播中消耗大量的时间。耗时的工作可以交给service处理。相关的内容可以参考另一片service的文章。

第一步:注册

注册分为两种一种是静态注册,一种是代码中注册。

静态注册:即使app被关闭,依然能接收广播,处于活动状态。

注意:
即使应用程序被关闭了,BroadcastReceiver都处于活动状态

<receiver android:name=".Receiver">        <intent-filter>            <action android:name="android.intent.action.AIRPLANE_MODE"></action>        </intent-filter></receiver>

记得静态注册的receiver不在activity中间,是与activity平行的。


动态注册-代码中注册:想要更新activity内部UI的时候可以使用

应用:BroadcastReceiver用于更新UI,在Activity启动时注册BroadcastReceiver,在Activity不可见以后取消

更新UI方法:在onCreate中注册,在activity不可见的时候取消注册

/*动态注册receiver*/String AUTH_ACTION = "android.provider.Telephony.SMS_RECEIVED";authReceiver = new AuthReceiver();IntentFilter filter = new IntentFilter();filter.addAction(AUTH_ACTION);          //指明动作registerReceiver(authReceiver, filter); //注册......unregisterReceiver(authReceiver); //解除receiver的注册
  • 我的项目中是想在MainActivity中接收来自于service的信息。所以AuthReceiver要作为MainActivity的内部类。
    定义如下:
private class AuthReceiver extends BroadcastReceiver{        public AuthReceiver() {            // TODO Auto-generated constructor stub        }        @Override        public void onReceive(Context context, Intent intent) {            //intent就是传递过来的内容        }

第二步:发送广播

intent.setAction(Intent.ACTION_EDIT);//选定动作intent.sendBroadcast(intent); //发送广播
  • 如果是静态注册的,那么不需要实例化Receiver,直接sendBroadcast(intent);就会实例化调用处理,在onReceive返回后,接收器销毁。

问题:

  1. 如何更新UI?
    activity的内部类即可
  2. onReceive如何区分不同广播的?
    在注册的时候绑定了动作,在发出广播的时候指定了动作。

动态广播:实例

动态注册>
这里写图片描述
这里写图片描述

0 0
原创粉丝点击