Android提供了一整套完整的API,允许应用程序自由地发送和接收广播。发送广播就是借助之前了解过的Intent,接收广播则需要用到广播接收器(Broadcast Receiver)。....所以此时的广播接收器是有顺序的,优先级高的广播接收器可以先接受到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。...2、广播接收器的使用方法 Android系统内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。...那么设定广播的先后顺序是根据广播的优先级来判断的,我们可以在AndroidManifest.xml中注册广播接收器时通过android:priority属性来设置优先级。...使用本地广播:Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。
因此,使用这种消息驱动模型的第一步便是订阅消息;而对Android应用程序来说,订阅消息其实就是注册广播接收器。...接下来,我们继续分析Android应用程序是如何注册广播接收器的,以及把广播接收器注册到哪里去的。...因此,Android应用程序注册广播接收器的过程就是把广播接收器注册到AMS的过程。...Android应用程序是通过调用ContextWrapper类的registerReceiver方法来把广播接收器BroadcastReceiver注册到AMS中去的,而ContextWrapper类本身又借助...我们先看一下这几个参数,receiver表示用户注册广播接收器;userId注册广播应用程序的userID;filter为广播接收器的接收条件;broadcastPermission广播接收器的权限信息
Broadcast 在Android中 Broadcast是一种 广泛运用在引用程序之间传输信息的机制。...这样效率是很高的但是 接收器的结果并不能影响其他的接受者 Orderd broadcasts(有序广播) :同步操作一次发送到一个接受者 ,按照预先声明的顺序依次接受,(-1000~1000)优先级高的优先接受到广播...---- 接收广播 使用broadcastsReceiver 接受广播,定义自己的广播接收器 只需继承BroadcastsReceiver; 广播接收器创建完毕后需要注册才能接受到。...* 定义 接收器 接收网络变化 继承 BroadcastReceiver /** * Created by sky-mxc * 网络状态改变接收器 */ public class NetworkReceiver...android:name="android.intent.action.BOOT_COMPLETED"> 开机广播 android:name=
, myBroadcastReceiver = new MyBroadcastReceiver(); // 在代码中动态注册广播接收器,intentFilter为这个广播接收器能接收到的广播信息的动作类型...,参数为Intent执行的动作类型, * 只有IntentFilter对象中包含了这个动作的广播接收器才能接收到这条广播信息, * IntentFilter...对象中的setAction方法中的参数时,这个广播信息才能被这个广播接收器接收到(其实就是发送广播的Intent对象的动作类型能够在注册广播时的IntentFilter对象中存在相同的动作类型时,这个广播接收器才能接收到这个...,intentFilter为这个广播接收器能接收到的广播信息的动作类型,用于过滤广播信息 registerReceiver(myBroadcastReceiver, intentFilter...,参数为Intent执行的动作类型, * 只有IntentFilter对象中包含了这个动作的广播接收器才能接收到这条广播信息, * IntentFilter
不过因为搜索动作是个异步的过程,startDiscovery方法并不直接返回搜索发现的设备结果,而是通过广播BluetoothDevice.ACTION_FOUND返回新发现的蓝牙设备。...所以页面代码需要注册一个蓝牙搜索结果的广播接收器,在接收器中解析蓝牙设备信息,再把新设备添加到蓝牙设备列表。... } } }; 搜索到的蓝牙设备可能会有多个,每发现一个新设备都会收到一次发现广播,这样设备列表是动态刷新的。...故而前面第三步的广播接收器得增加过滤绑定状态的变更动作,接收器内部也要补充更新蓝牙设备的绑定状态了。.../需要过滤多个动作,则调用IntentFilter对象的addAction添加新动作 IntentFilter discoveryFilter = new IntentFilter();
类) 过滤器 在其中的action都是可以通过的 action android:name="" 动作.可以是系统动作,也可以是自定义的定动作...Demo 应用程序发送广播 ,应用程序内的广播接收器接收广播并获得广播的数据 1 package com.example.demo01; 2 3 import android.os.Bundle...声明广播接收器的级别:android:priority="100" (2)有序广播发送 为 : Context.sendOrderedBroadcast(Intent) 发送普通的有序广播...,则一个广播发过来之后,优先级为100的广播接收器先接受,然后优先级0的广播接收器接收, 最后优先级为-100的广播接收器再接受,但是当优先级为100的广播接收器的onReceive()方法内部执行了abortBroadcast...由广播机制带来的安全性考虑 在清单文件中注册广播接收器的时候有一个属性 android:exported="true|false" 这里就需要注意了: 这个属性的意思是本应用程序是否允许接受外部应用程序发来的广播
#Android应用程序架构 ---- Android程序的入口被称为Main Activity,带有界面的Android应用程序一般需要从Main Activity启动。...Android应用程序组件 ---- 应用程序组件是一个Android应用程序的基本构建块。这些组件由应用清单文件松耦合的组织。...服务类必须从android.app.Service继承。 ---- BroadCast Receiver 广播接收器组件唯一的功能就是接收广播动作,以及对广播动作做出相应。...一个程序可以有很多个BroadCast Receiver,所有的广播接收类都必须继承android.content.BroadcastReceiver类。...广播接收器和服务一样没有用户接口,但在广播接收器中可以启动一个Activity来响应广播动作,比如通过一个Activity对用户进行提醒。
而负责接收Broadcast数据的接收器却永远不知道什么时候可以接收到广播。...必须要指定 我们编写的短信接收器才可以接收系统的短信广播,切记 配置权限android.permission.RECEIVE_SMS 即使注册广播接收器的程序关闭,接收器仍然会接收到广播,除非从模拟器或者手机中卸载程序或者注销接收器...,否则无法阻止接收器接收广播 ---- 用代码注册广播接收器 如果在清单文件中配置广播接收器,程序安装后就会自动注册广播接收器,如果想在适当的时候注册广播接收器,在使用完成之后将其注销就需要使用Java...广播的优先级只是对同步处理方式起作用,如果在接收器中使用了异步处理方式,则调用的顺序除了和优先级有关,还和Android系统的线程调用有关。...来去电拦截 广播动作 监听电话状态以用于拦截来去电,来电(监听电话状态)和去电的广播动作如下: 来电:android.intent.action.PHONE_STATE 去电:android.intent.action.NEW_OUTGOING_CALL
2、广播接收器的类型 (1)Normal broadcasts:默认广播 发送一条默认的广播 Context.sendBroadcast()方法,普通广播对于多个接收者来说是异步的,通常每个接受者都无需等待即可以接收到广播...,接受者相互之间不会有影响,对于这种广播,接受者无法终止广播,即无法阻止其他接受者的接收动作 MainActivity.java sendNormal = (Button) findViewById...3、广播接收器的创建步骤 1、构建Intent,使用sendBroadcast方法发送广播 2、定义一个广播接收器,该广播接收器集成BroadcastReceiver,并且覆盖onReceive()方法来响应事件...,例如系统的短信就是有序的广播的形式,一个应用可能是具有拦截垃圾短信的功能,当短信到来的时候它可以先接收到短信,必要时候终止广播的传递,这样的软件就必须声明接收短信的权限。...():这个方法具有有序广播的特性也有粘性广播的特性; 在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册的收到最先。
, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要...removeStickyBroadcast(intent)主动把它去掉 注意:发送广播时的intent参数与Contex.startActivity()启动起来的Intent不同,前者可以被多个订阅它的广播接收器调用...静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。...Context.sendOrderedBroadcast()或Context.sendStickyBroadcast()Android 会调用所有对此广播有兴趣的广播接收器的onReceive()方法,...而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。
设置广播接收器 首先,你需要在接收消息的Activity中设置LocalBroadcastManager来接收广播。在onCreate方法或其他合适的生命周期方法中注册广播接收器。...每个广播都需要指定一个唯一的动作(Action),这里使用的是com.example.ACTION_CUSTOM_BROADCAST。...你可以在任意Activity内发送和接收这个动作的广播,确保动作字符串唯一即可避免冲突。 4. 注意事项 安全性: 本地广播只能在应用内传递,外部应用无法接收或发送本地广播,因此更安全。...性能: 本地广播相比全局广播更高效,适用于应用内部组件间的通信。 组件生命周期: 确保在相应的生命周期方法(如onDestroy)中取消广播接收器的注册,以避免内存泄漏。...总结 通过本地广播机制,可以方便地实现应用内部不同组件之间的通信。本文示范了如何设置接收器、发送广播以及在生命周期中正确管理广播接收器。通过这种方式,可以保证应用的通信安全和高效。
4.2.2 创建/使用广播接收器 规则书 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA...所以不要认为收到的意图在没有任何验证的情况下,是完全安全的。 内部广播接收机具有一定程度的风险,因此还需要验证接收意图的安全性。 请参考“3.2 小心和安全地处理输入数据”。...具有指定receiverPermission参数的广播无法发送。 出于这个原因,通过粘性广播发送的信息,可以被多个未指定的应用访问 - 包括恶意软件 - 因此敏感信息禁止以这种方式发送。...请注意,粘性广播在 Android 5.0(API Level 21)中已弃用。...然而,其他应用接收的数据可能会间接作为结果数据转发。 因此,如果没有任何验证,结果数据不应该被认为是安全的。 当发送方(源)广播接收器是内部广播接收器时,它具有一定程度的风险。
定义 BroadcastReceiver(广播接收器)即广播,是一个全局的监听器。 Android 广播分为两个角色:广播发送者、广播接受者。 2....应用场景 同一 App 内部的同一组件内的消息通信(单个或多个线程之间); 同一 App 内部的不同组件之间的消息通信(单个进程); 同一 App 具有多个进程的不同组件之间的消息通信; 不同 App...,具有相应权限的广播发送方发送的广播才能被此 BroadcastReceiver 所接收;android:process —— BroadcastReceiver 运行所处的进程。...若发送广播有相应权限,那么广播接收者也需要相应权限 2.系统广播(System Broadcast) Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。...每个系统广播都具有特定的 intent-filter,其中主要包括具体的 action,系统广播发出后,将被相应的BroadcastReceiver 接收。
4.2.3 创建/使用广播接收器 高级话题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA...当应用 A 广播隐式意图时,不仅是相同应用中的私有接收器,而且具有相同意图过滤器定义的公共接收器(B-1)也可以接收意图。 (图中的红色箭头标记)。...即使它是私有广播接收器,也可以接收从 UID 相同的应用发送的广播。 但是,这不会是一个安全问题。 由于可以确保 UID 相同的应用具有用于签署 APK 的一致的开发人员密钥。...广播由多个广播接收器同时接收。 这与有序广播有所不同。 广播被允许由特定的广播接收机接收。 有序 有序广播的特点是,可接收的广播接收器依次接收广播。 优先级较高的广播接收器较早收到。...电池状态变化通知的广播(ACTION_BATTERY_CHANGED)是粘性广播的代表性示例。 粘性有序 这是具有有序和粘性特征的广播。
动态广播接收器 要注册一个上下文相关的动态广播接收器,执行以下步骤: 对进程状态的影响 你的广播接收器的状态会影响它所在的进程的状态,转而会影响进程被系统杀死的可能性。...然而,一旦从onReceive()返回,广播接收器就不再处于激活状态,它的宿主进程也就跟其它的普通进程具有相同的优先级。...receiver接收的顺序可以通过intent-filter中的android:priority属性控制,具有相同接收优先级的receiver的接收顺序是随机的。...有时,Android系统会强制要求使用上下文相关的广播接收器。比如CONNECTIVITY_ACTION这个广播只会发送给上下文相关的广播接收器。 不要使用隐式intent发送敏感信息。...系统会将广播发送到匹配该包名的应用中。 你可以通过LocalBroadcastManager发送本地广播。 当你注册一个receiver后,任何应用都可以向你发送具有潜在恶意信息的广播。
一 BroadcastReceiver基本介绍 BroadcastReceiver(广播接收器)是Android中的一个组件,用于接收和响应系统或应用发送的广播消息。...在标签内部添加一个或多个标签,用于指定你所关心的广播消息和对应的优先级。...):该方法用于终止广播,即在该方法之后,其他具有较低优先级的广播接收者将不再接收同一条广播。...可以通过intent-filter指定要接收的广播类型,也可以通过setAction方法设置特定的广播动作。...BroadcastReceiver在Android开发中具有广泛的应用,例如监听网络状态变化、监听系统事件、管理通知等。
(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。...(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。 (3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。...静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。...谷歌官网的原文是:应用无法使用其清单注册大部分隐式广播。不过,是不能对大部分的广播进行注册,但还是有些广播可以进行静态注册的,比如对接收Android开机的广播通过静态注册还是能够正常接收的。...隐式的Intent就是你不知道要启动的组件名称,只知道一个Intent动作要执行,比如:拍照,录像,查看地图。一般来说这种Intent用在不同的应用之间传递信息。
Broadcast 是一种被用于应用内和应用之间传递信息的机制。一个广播可以对应多个接受者。...一个完整的广播机制,需要具有以下三个要素: 发送广播的Broadcast 接受广播的BroadcastReceiver 传递信息的Intent 广播的注册分为静态注册和动态注册: 静态注册:静态注册的广播是指在...普通广播中,接受者不能将处理结果传递给下一个接收器,也无法终止广播的传播。...:我是一个普通广播 普通广播的接收顺序测试 我们仿照MyBroadcastReciver创建多个接收器,代码一样: /** * 静态注册的广播接收器2 * Created by liuwei on...: 接收到广播消息:我是一个有序广播 三、本地广播 以上的广播对于系统来说是全局的,发出广播后,系统内的应用只要注册了相应的接收器就都可以收到广播。
一个 Android 应用程序是一个包(Package),包中可能包含一个或者多个 Android 组件(component)。...大多数的应用程序都会有多个用户界面,因此便会有多个相应的活动。...(2)广播接收器(BroadcastReceiver) 广播接收器用于让应用程序对一个外部事件做出响应。例如:电话呼入事件、数据网络可用通知或者到了晚上时进行通知。...广播接收器的生命周期 广播接收器有一个单一的回调方法 onReceive(),当广播消息到达接收器时,Android 将调用这个方法,并传递给包含在这个消息中的 Intent 对象。...广播接收器只有在这个方法的执行过程中才处于活动状态,当 onReceive()返回后,广播接收器将不再处于活动状态。广播接收器的功能类似于一个回调函数,只是单次运行时处于活动状态。
android:enabled="true"表示是否启用这个广播接收器;android:exported="true"表示这个广播接收器能否接收其他APP发出的广播。...接着,创建广播接收器NetworkChangeReceiver,把接收器和动作过滤器通过registerReceiver 函数绑定在一起,完成动态注册。...标准广播与收听的校园广播类似,广播站广播消息,每个人都能听到。标准广播的消息几乎同时到达每一个接收器,它们没有接收先后顺序之分。消息不会被其他人屏蔽,每个人都能够收到系统消息。...使用有序广播,在某一个时刻只有一个接收器收到消息,它处理完消息以后,再把消息发送给下一个接收器。收听广播的顺序由接收器的优先级来确定。接收器可以截断消息,不传递,这样后面的接收器就无法获得广播消息。...Intent是立即执行某个动作,PendingIntent是延迟执行,它更加倾向于在某个合适的时机去执行某个动作。
领取专属 10元无门槛券
手把手带您无忧上云