Broadcast简介

原创 2015年11月21日 16:38:11

简介:

 Broadcast是用于接收广播的组件,用于组件和组件之间的通信,可以跨应用程序传递。如操作系统电池电量低会发送一个广播,这样我们的程序就可以去监听这个广播,然后程序可以做相应的事儿。

需要掌握的类:BroadcastRecevier,开发利器。

BroadcastRecevier创建

  • 系统提供的Broadcast是抽象类,需要重写 onReceive(Context context, Intent intent)方法,这个方法可以得到随广播而来的数据

Broadcast注册

  • 静态注册
    • 特点:是当程序退出后,广播依然存在,直至用户卸载
    • 注册方式:在AndriodManifest文件中
<receiver
    android:name="com.mixm.activity.BroadCastT3"
    android:exported="true" >
    <intent-filter android:priority="4" >
        <action android:name="all" >
        </action>
    </intent-filter>
</receiver>  

说明:android:exported=”true” 是否只接收本应用的广播 android:priority=”4”:优先级

  • 动态注册
    • 特点:该广播只在应用中有效,退出广播后不再接收广播
    • 注册方式:动态注册需要在代码中动态的指定广播地址并注册
      注册
Recevier r = new Recevier();
IntentFilter filter = new IntentFilter();
filter.addAction("all");
registerReceiver(r, filter);

解除注册

@Override
protected void onDestroy() {
        super.onDestroy();

        try {
            this.unregisterReceiver(r);
        } catch (Exception e) {
            //不做任何处理
        }
}
  • 注意:registerReceiver 是 android.content.ContextWrapper 类中的方法, Activity 和 Service都继承了 ContextWrapper,所以可以直接调用。在实际应用中,我们在 Activity 或 Service 中注册了一个 BroadcastReceiver,当这个 Activity 或 Service 被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,记得在特定的地方执行解除注册操作

广播的发送

 广播的发送和接收都是跨进程的,一个app发送的广播,其他的app只要有权限和action匹配都可以接收到该广播。

  • 发送标准广播
Intent intent = new Intent(this, BroadCastT1.class);
sendBroadcast(intent);    //这个方法是上下文中的
  • 发送有序广播
    第一种方式

    Intent intent = new Intent();
    intent.setAction("all");
    intent.putExtra("data", "heiheiheiheida");
    sendBroadcast(intent, receiverPermission);

    说明:receiverPerssion:是否需要接受者需要选取相应的权限才可以收到广播
    第二种方式

    sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);

    说明:由于发送广播的时候,中间可能会被接受者拦截,resultReceiver指定一个这个广播的最终接受者,最终接收者肯定会接收到。其余的参数暂且给0或者null。
  • 注意:
    • 发送有序广播时,先接到广播的可以取消广播,导致后面的优先级低的广播接收者不会接到广播。
abortBroadcast(); //放弃当前的广播,则优先级低的无法收到当前广播
  • 如果优先级高的广播想给优先级低的广播接收者传递数据,可以通过以下方法:
setResult();
setResultData()
setResultCode()
setResultExtras();

广播的分类

  • 普通广播

说明:普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。

  • 有序广播

说明:有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接收者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播可以使用 intent-filter 里面的 android:priority=”1000”去解决
使用方式:

  • 可以通过android:priority属性指定广播接收者的接收顺序,值较大的广播接收者会优先接收
  • 每个广播接受者是有序接收广播,如果中间使用abortBraodcast()方法会终止广播,即后面的接收者不会再收到广播。
  • 每个接收者接收的intent都是从发送方发送的同一个intent对象,每个接收者都是孤立的,它们之间不可以互相接收intent。

注意:

  1. 静态注册的广播接收者 app 一旦安装在系统,则可以接收到指定的广播。不管这个 app 有没有启动。 2、动态注册的广播接收者只有在注册完成后才能接收到广播,当注册他的组件销毁的时候,广播接收者也应该解除注册。
  2. 如果接收者处于一个非前台的状态下,就不能随便创建实例化可视化的view,包括alertDialog,可以创建notification对象。
版权声明:本文为博主原创文章,未经博主允许不得转载。

四大组件之Broadcast简介

广播机制简介 Android 中的广播主要可以分为两种类型,标准广播(无序广播)和有序广播。广播是一种可以跨进程的通信方式,通过intent传递信息,没有构造函数 标准广播(Normal broa...

Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介

通过第一篇的讲解,我们已经看到了如何使用Intent来启动新的应用程序组件,但是实际上他们也可以使用sendBroadcast方法来在组件间匿名的广播消息。 作为一个系统级别的消息传递机制,Inten...

Android-Broadcast广播事件(1)-简介及普通广播调用步骤

前言 BroadcastReceiver即广播接收器,是专门用于接受广播消息以及做出相应处理的组件。其本质就是一个全局监听器,接收程序所发出的Broadcast Intent。 但是它是没...
  • ohcezzz
  • ohcezzz
  • 2017年05月02日 22:14
  • 81

android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler&利用broadcast广播机制

遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决。 1.在MyAPP中定义属性handler [j...
  • skyzhd
  • skyzhd
  • 2016年04月01日 19:07
  • 799

七个pdf理解spark系列_7-Broadcast

  • 2017年07月02日 11:44
  • 712KB
  • 下载

Android Broadcast 静态注册Demo代码

  • 2015年03月12日 15:19
  • 1.96MB
  • 下载

利用Broadcast实现短信截取功能

BroadCast Receiver顾名思义是指广播接受者,它和时间处理机制类似,只不过事件吃力机制是程序组件级别的,而广播时间处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组...
  • linsone
  • linsone
  • 2012年02月20日 21:41
  • 393

Android Intent Service BroadCast AndroidStudio

  • 2015年11月06日 18:08
  • 25.75MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Broadcast简介
举报原因:
原因补充:

(最多只允许输入30个字)