BroadcastReceiver的使用,动态注册和注销,优先级和中断控制
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的使用,动态注册和注销,优先级和中断控制的更多相关文章
- Android学习笔记(十一)BroadcastReceiver动态注册、注销示例
在上一篇博文中简单介绍了一下BroadcastReceiver的相关知识点,本篇举一个在代码中动态的注册.注销BroadcastReceiver的栗子. 1.首先创建一个MyReceiver并继承Br ...
- Android实现AppWidget、Broadcast动态注册
Android实现AppWidget.Broadcast动态注册 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 主界面可以编辑广播的信息,点 ...
- Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册
1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...
- Android(java)学习笔记116:BroadcastReceiver之 静态注册 和 动态注册
1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- 动态注册BroadcastReceiver
1. [代码][Java]代码 package com.zjt.innerreceiver; import android.app.Service; import android.con ...
- 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法
在某APK中,通过如下方法动态注册了一个BroadcastReceiver,代码参考如下: @Override protected void onAttachedToWindow() { super. ...
- BroadcastReceiver的两种注册方式之------动态注册
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- BroadcastReceiver(广播)的静态注册和动态注册 --Android开发
BroadcastReceiver是安卓四大组件之一,本例通过代码的方式演示静态注册和动态注册. 1.静态注册 静态注册只需要AndroidManifest.xml中进行配置: AndroidMani ...
随机推荐
- jenkins+git 构建项目
首先先参照了网上几篇文章 http://blog.csdn.net/kefengwang/article/details/54233584 https://www.liaoxuefeng.com/ar ...
- Centos7.0根分区扩容
添加一块10G的硬盘 查看磁盘大小 # df -Th 查看物理卷组 # vgdisplay 查看逻辑卷 # lvs 查看磁盘信息 # fdisk -l 对添加的10G硬盘分区 # fdisk /dev ...
- SCCM2012 R2实战系列之五:发现方法
打开SCCM2012的控制台 点击左侧栏的“管理”选项,然后展开“层次结构配置”,点击“发现方法”来配置客户端发现. 勾选“启用Active Directory林发现”.“发现Active Direc ...
- 在linux下,去除^M,将windows格式文件(dos文件)改为unix格式文件
在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n'就显示成^M+' ...
- visual studio 版本管理从tfs迁移到svn
1.首先要解除解决方案的tfs绑定 清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc 删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可. 修改项目的解决方 ...
- mac一些设置
Mac自带了的JDK6,安装在目录:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/下. JDK8则需要自己到Oracle官网下载安装对应的版本. ...
- sublime 格式化react插件配置教程 jsfmt配置
1.下载如下插件: https://github.com/ionutvmi/sublime-jsfmt#installation 这个插件是jsfmt,可以直接在package里搜索到: 2.user ...
- IE 主页被恶意篡改的解决方法
IE 主页被篡改了,在ie 的 主页设置中不起任何作用,这个时候,就要打开注册表来修改: 具体操作如下: 1.运行 regedit 打开注册表 2.找到 HKEY_LOCAL_MACHINE\SOF ...
- JVM总结-Java 虚拟机是怎么识别目标方法(下)
1. 虚方法调用 在上一篇中我曾经提到,Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用都会被编译成 invokeinterface 指令.这两种指令, ...
- (转)CSS3:nth-child()伪类选择器,奇偶数行自定义样式first-child
原文地址 Table表格奇偶数行定义样式: CSS3的强大,让人惊叹,人们在惊喜之余,又不得不为其艰难的道路感到可惜:好的标准只有得到行业浏览器的良好支持才算得上“标准”.CSS3标 准已提出数年,但 ...