BroadcastReceiver:

BroadcastReceiver(广播接收器)是Android中的四大组件之一,用来通知某些事件的相关信息,如下载完成,设置改变等。

默认的BroadcastReceiver状态(新建完未更改任何设置)的简单使用方法:

1.通过new Intnet(MainActivity.this,MyReceiver.class)来启动指明的广播对象,(当manifests中注册了此BroadcastReceiver才能通过这种方法启动)

2.Intent可以通过intent.putExtra()方法携带一些信息,将这些信息传递给Broadcast

启动代码:

Intent i = new Intent(MainActivity.this,MyReceiver.class);
i.putExtra("data","testing");
sendBroadcast(i);

动态注册和注销:

在新建BroadcastReceiver时,IDE默认在manifests文件中给BroadcastReceiver注册,当manifests文件中删除了它的注册信息的时候,可以在BroadcastReceiver中添加public static final action = "包名.Intent.action.actionName"),然后通过new Intent(BroadcastReceiverName.action)来启动未注册的BroadcastReceiver)。

注册方法:

//在BroadcastReceiver中需要添加,用于启动BroadcastReceiver
public static final String action = "程序包名.intent.action.MyReceiver";
//此注册方法的代码在Activity中
private MyReceiver receiver = null;
if (receiver==null){
  receiver = new MyReceiver();
registerReceiver(receiver,new IntentFilter(MyReceiver.action));
}

注销方法:

if (receiver!=null){
  unregisterReceiver(receiver);
receiver = null;
}

同时向多个BroadcastReceiver发送信息的方法:

1.在manifests文件中为需要同时发送的BroadcastReceiver注册相同的启动action

2.通过Intent启动多个BroadcastReceiver相同的action,并向其发送信息,即能是所有相同action的BroadcastReceiver收到信息

manifests模块的注册代码:

<receiver
android:name=".MyReceiver1"
android:enabled="true"
android:exported="true"> <intent-filter>
//设置的action
<action android:name="程序包名.intent.action.MyReceiver"/>
</intent-filter>
</receiver>
<receiver android:name=".MyReceiver">
<intent-filter>
//设置的action
<action android:name="程序包名.intent.action.MyReceiver"/>
</intent-filter>
</receiver> //启动代码同注册时

BroadcastReceiver的优先级和中断操作:

BroadcastReceiver在未设置优先级的时候,同时发送信息的话,先在manifests文件中注册的BroadcastReceiver先收到信息,若是设置了优先级信息,那么优先级数值越大,优先级越高,优先级越高就先执行。

注:优先级在manifests文件中设置

在manifests文件中设置优先级的代码:

<receiver
android:name=".MyReceiver1"
android:enabled="true"
android:exported="true"> <intent-filter
android:priority="9">    //设置MyReceiver1的优先级为9
<action android:name="andrew.com.broadcastreceiverdemo.intent.action.MyReceiver"/>
</intent-filter>
</receiver>

<receiver android:name=".MyReceiver">

<intent-filter
android:priority="10">    //设置MyReceiver的优先级为10
<action android:name="andrew.com.broadcastreceiverdemo.intent.action.MyReceiver"/>
</intent-filter>

</receiver> //在设置对应的优先级后,MyReceiver会先接收到信息

BroadcastReceiver的中断操作:

在BroadcastReceiver存在接收优先级的时候,先接收到信息的BroadcastReceiver可以选择中断此广播,让优先级低于自己的BroadcastReceiver无法再接收到此次广播。

中断广播继续传递的代码:

 @Override
public void onReceive(Context context, Intent intent) {
abortBroadcast(); //在这里中断此次广播
}

注:

若是有中断广播的操作,那么启动广播传递的方式不能是sendBroadcast()方法,使用sendBroadcast()发送的广播在接收时被中断,程序会出现错误。

要使中断广播的操作正常运行,需要使用sendOrderedBroadcast()方法。

BroadcastReceiver的使用,动态注册和注销,优先级和中断控制的更多相关文章

  1. Android学习笔记(十一)BroadcastReceiver动态注册、注销示例

    在上一篇博文中简单介绍了一下BroadcastReceiver的相关知识点,本篇举一个在代码中动态的注册.注销BroadcastReceiver的栗子. 1.首先创建一个MyReceiver并继承Br ...

  2. Android实现AppWidget、Broadcast动态注册

    Android实现AppWidget.Broadcast动态注册 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 主界面可以编辑广播的信息,点 ...

  3. Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册

    1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...

  4. Android(java)学习笔记116:BroadcastReceiver之 静态注册 和 动态注册

    1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...

  5. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  6. 动态注册BroadcastReceiver

    1. [代码][Java]代码      package com.zjt.innerreceiver;   import android.app.Service; import android.con ...

  7. 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法

    在某APK中,通过如下方法动态注册了一个BroadcastReceiver,代码参考如下: @Override protected void onAttachedToWindow() { super. ...

  8. BroadcastReceiver的两种注册方式之------动态注册

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  9. BroadcastReceiver(广播)的静态注册和动态注册 --Android开发

    BroadcastReceiver是安卓四大组件之一,本例通过代码的方式演示静态注册和动态注册. 1.静态注册 静态注册只需要AndroidManifest.xml中进行配置: AndroidMani ...

随机推荐

  1. 关于oracle的sqlplus显示不完全的修改方法

    这样的显示看起来很痛苦 需要换行的时候没有进行换行,不需要换行的时候却进行了换行 参考的博客地址 https://blog.csdn.net/pan_tian/article/details/8059 ...

  2. PHP 多态理解

    PHP 多态   多态性是指相同的操作或函数.过程可作用于多种类型的对象上并获得不同的结果.不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性. 多态性允许每个对象以适合自身的方式去响应 ...

  3. 小程序踩坑异步请求json时,headers设置 "content-type": "application/x-www-form-urlencoded"

    wx.request({ url: url, method:params.method, data: params.data, header: { "content-type": ...

  4. 贪吃蛇 v1.01

    1.长度二节:2.如果触及屏幕边缘,游戏结束: 感谢张瑞阳同学改进 #include<bits/stdc++.h>#include<windows.h>#include< ...

  5. 删除win7任务栏通知区域图标的方法

    大家都知道程序运行后会在任务栏的通知区域显示表明正在运行,但是有很多失效的图标也会在此显示,那么怎么样删除那些没用的图标呢? 1.在开始运行里输入:regedit进入注册表编辑器 2.进入注册表编辑器 ...

  6. MybatisUtil的使用,便于产生SqlSession

    简化代码,实现一个静态的工具类来实现获取SqlSession 主要有getSqlSessionFactory()和getSqlSession() public class MybatisUtil { ...

  7. 如何跳过前端JavaScript的验证

    绕开前端的JS验证通常有以下的方法: 方法一: 将页面保存到自己机器上,然后把脚本检查的地方去掉,最后在自己机器上运行那个页面就可以了 方法二: 该方式与方法一类似一样,只是将引入js的语句删掉,或则 ...

  8. KafkaAPI实战

    新旧API使用 Flume和Kafka集成: Kafka有两套API: 过时的API 和新API 准备工作 <dependencies> <dependency> <gr ...

  9. RecyclerView拖拽排序;

    效果就是这样,RecyclerView列表可拖拽排序,可删除,可添加: RecyclerView给我们提供了一个手势器: ItemTouchHelper helper = new ItemTouchH ...

  10. python更新数据库脚本三种方法

    最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...