注册到系统中 // 当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。...5.2.3 两种注册方式的区别 5.3 广播发送者向AMS发送广播 5.3.1 广播的发送 广播 是 用”意图(Intent)“标识 定义广播的本质 = 定义广播所具备的“意图(Intent)” 广播发送...= 广播发送者 将此广播的“意图(Intent)”通过sendBroadcast()方法发送出去 5.3.2 广播的类型 广播的类型主要分为5类: 普通广播(Normal Broadcast) 系统广播...系统广播(System Broadcast) Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广播 每个广播都有特定的Intent - Filter...,只需要在注册广播接收者时定义相关的action即可,并不需要手动发送广播,当系统有相关操作时会自动进行系统广播 3.
方法不能执行耗时操作,否则将导致ANR。...@Override public void onReceive(Context context, Intent intent) { //写入接收广播后的操作 } } 4.2 广播接收器注册...4.3 广播发送者向AMS发送广播 4.3.1 广播的发送 广播是用”意图(Intent)“标识 定义广播的本质:定义广播所具备的“意图(Intent)” 广播发送:广播发送者将此广播的”意图“通过sendBroadcast...系统广播(System Broadcast) Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广播 每个广播都有特定的Intent - Filter...,只需要在注册广播接收者时定义相关的action即可,并不需要手动发送广播,当系统有相关操作时会自动进行系统广播 3.
前言 距离上次更新过去一周多了,打破了之前两到三天一更的惯例,主要还是要研究的东西太杂了 本篇文章将对 BroadcastReceiver 开发中,可能用到的知识点,可能遇到的问题进行总结。...这种组件本质上是一种全局的监听器,用于监听系统全局的广播消息。 它可以接收来自系统和应用的的广播。..., 意图添加消息内容, 意图设置 action( … ) 要匹配 , 然后发送广播即可....1.7 本地广播 本地广播机制使得发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接受来自本应用程序发出的广播,则安全性得到了提高。...不能执行耗时操作 一方面 BroadcastReceiver 一般处于主线程。
`动态`使用 3).BroadcastReceiver`有序`广播 4).BroadcastReceiver和`系统`行为的结合 5).小例子:使用BroadcastReceiver更新音乐播放器进度条...AndroidManifest.xml中配置意图过滤器来匹配 关于intent的相关知识,见前一篇,这里不做解释 1.写一个类继承自BroadcastReceiver /** * 作者:张风捷特烈...B项目中触发 这就是静态广播厉害的地方,也是我第一次接触的跨进程通信 (这说明解耦到一定的境界,就天下与我同,然而我将无处不在,手动滑稽) 二、BroadcastReceiver动态使用 BroadcastReceiver...有序广播的动态注册形式的代码, 静态注册在AndroidManifest.xml里配置类似,就不废话了 还有一点注意的是sendOrderedBroadcast方法调用时传入的BroadcastReceiver...mMusicPlayer.release() } 其实也就是发广播-->收广播-->操作,用起来并不困难 至于BroadcastReceiver的源码,暂时就不读了(读了一下,没怎么读得通
; ② 间隔设定 : 开发者可以设定触发任务执行的周期 , 该任务一般是通过发送延迟意图 PendingIntent 实现 ; ③ 广播接收者 : 一般使用 AlarmManager 定时发送 延迟意图...: 注册上述创建的广播接收者 , 注册接收 ACTION 广播 ; IntentFilter intentFilter = new IntentFilter("ACTION"); registerReceiver...( receiver, intentFilter); ③ 创建延迟意图 : 首先创建普通的 Intent 意图 , 然后设置 ACTION 事件 , 根据该 Intent 创建延迟意图 PendingIntent..., 广播接收者接收到该意图 , 就会处理对应事件 ; // 获取闹钟管理器 mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE)..., SystemClock.elapsedRealtime(), 50000, pendingIntent); } /** * 接收上面每隔 5 秒发送的广播
Android 中所有与观察者模式有关的设计中,一旦涉及到 register,必定在相应的时机需要 unregister。...5.3 广播发送及广播类型 广播发送:广播的“发送”与“接收”,表面上看是广播作为 Android 广播机制中的实体,实际上这一实体本身是并不是以所谓的”广播“对象存在的,而是以”意图“(Intent)...定义广播的定义本质,实际就是相应广播”意图“的定义过程,然后通过广播发送者通过 sendBroadcast() 方法将此”意图“发送出去。...当使用系统广播时,只需在注册广播接收者时定义相关的action即可,不需要手动发送广播,当系统有相关操作时会自动进行系统广播的发送。 ?...当然,一般情况下,不建议对有序广播进行此类操作,尤其是针对系统中的有序广播。
方法 , 设置 BroadcastReceiver receiver 广播接收者参数为空 , IntentFilter 就是上述创建的意图过滤器 ; Intent intent = context.registerReceiver...广播接受者注册用法 : ① 注册广播接收者 : registerReceiver 方法主要作用是在主线程注册一个广播接收者 BroadcastReceiver 运行 ; ② 广播接收者调用 : 当注册的...IntentFilter 中的 action 匹配到相应的广播时 , BroadcastReceiver 会被在主线程调用 ; ③ 历史广播保存 : 系统发送完毕的广播 , 会被保存下来 , 在后续注册时发送...; ④ 广播复用机制 : 一旦有广播接收者注册广播 , 如果之前发送完毕的广播与本次注册的 IntentFilter 意图的 Action 匹配 , 次函数就会返回一个 Intent , 这个 Intent...⑥ 注册多个意图 : 如果在 IntentFilter 中注册多个意图 , 广播接收者如果不为空 , 则会处理每一个意图 , 但是返回值只能返回一个意图 , 返回哪个由系统决定 ; 广播接收者注册方法有两种功能
表 4.2:广播接收器的类型定义: 类型 定义 私有 只能接收来自相同应用的广播的广播接收器,所以是最安全的 公共 可以接收来自未指定的大量应用的广播的广播接收器 内部 只能接收来自其他内部应用的广播的广播接收器...要点(接收广播): 1) 将导出属性显示设为false 2) 小心并安全地处理收到的意图,即使意图从相同的应用中发送 3) 敏感信息可以作为返回结果发送,因为请求来自相同应用 AndroidManifest.xml...: 要点(发送广播): 4) 使用带有指定类的显式意图,来调用相同应用中的接收器。...要点(接收广播): 1) 将导出属性显式设为true。 2) 小心并安全地处理收到的意图。 3) 返回结果时,不要包含敏感信息。 公共广播接收器的示例代码可以用于静态和动态广播接收器。...7) 尽管广播是从内部应用发送的,但要小心并安全地处理接收到的意图。 8) 由于请求应用是内部的,因此可以返回敏感信息。
意图描述 :意图是要执行的操作的抽象描述。...这是通过的过程中处理的意图的分辨率,其中意图映射到Activity,BroadcastReceiver 或者 Service(或有时两个或两个以上的活动/接收器),其可以处理它。...(另外,在广播的情况下,任何BroadcastReceiver明确注册的对象registerReceiver(BroadcastReceiver, IntentFilter)。)...也就是说,如果包括的类别CATEGORY_LAUNCHER和CATEGORY_ALTERNATIVE, 那么你只会解决到组件与列出的意图都这些类别。...串 EXTRA_RESTRICTIONS_LIST 额外用于来自处理的BroadcastReceiver的响应 ACTION_GET_RESTRICTION_ENTRIES。
当应用 A 广播隐式意图时,不仅是相同应用中的私有接收器,而且具有相同意图过滤器定义的公共接收器(B-1)也可以接收意图。 (图中的红色箭头标记)。...然而,当广播接收器仅接收由系统发送的广播意图时,应使用带有意图过滤器定义的exported="false"。 其他组合不应使用。...这是基于这样一个事实,即系统发送的广播意图可以通过exported="false"来接收。 如果其他应用发送的意图的ACTION与系统发送的广播意图相同,则可能会通过接收它而导致意外行为。...应用只有在第一次启动后才能接收广播;因此,安装后无法使用接收的广播作为启动操作的触发器。.../ org.jssec.android.broadcastreceiver.creating.CreatingType3Receiver 接收方的缺少权限的错误: W/ActivityManager(275
为"mybroadcast" 依次把接收方和发送方运行到模拟器,来看看运行结果: 在发送方的界面,点击发送无序广播,看到接收方的Toast显示出来了,接收到了广播 有序广播: 是一种同步执行的广播,在广播发出之后...喜欢sendBroadcast(Intent),此方法是异步的;它将在调用结果tReceiver.onRecept()之前返回。 看见BroadcastReceiver有关意图广播的更多信息。...参数 intent Intent:广播的意图;所有符合这一意图的接收者都将收到广播。 receiverPermission String:字符串命名接收方接收广播时必须持有的权限。...本地广播: 不管是有序广播无序广播还是系统的广播都是全局性的广播,即发出的广播可以被其他任何应用程序接收到,并且我们也可以接受来自于其他任何应用程序的广播,这样就很容易引起安全问题,比如我们发送一些携带关键性数据的广播有可能被其他应用程序截获...动态注册一般用于操作特别频繁的广播事件,比如屏幕的锁屏与解锁,电池电量的变化。
Broadcast Receiver安全场景和危害 BroadcastReceiver是Android的四大组件之一,这个组件涉及两个概念:广播发送者和广播接受者。...发送广播时如果处理不当,恶意应用便可以嗅探、拦截广播,致使敏感数据泄露等;如果接收广播时处理不当,便可导致拒绝服务攻击、伪造消息、越权操作等。...恶意应用便可以注册一个广播接收者嗅探拦截到这个广播,如果这个广播里存在敏感数据,就被恶意应用窃取了。...如果导出的BroadcastReceiver没有做权限控制,导致BroadcastReceiver组件可以接收一个外部可控url、或者其他命令,导致攻击者可以越权利用应用的一些特定功能,比如发送恶意广播...发送的广播包含敏感信息时需指定广播接收器,使用显示意图或者setPackage(String packageName)。 使用LocalBroadcastManager。
它允许应用程序在某些事件发生时收到通知并采取相应操作。 BroadcastReceiver通过注册到系统中指定的广播过滤器来接收广播消息。...在onReceive()方法中编写接收到广播后的逻辑代码。 注意事项: 在静态注册时,请确保在AndroidManifest.xml文件中正确声明权限和过滤器。...当广播被发送时,该方法会被自动调用。参数包括上下文Context和广播携带的Intent对象,可以通过Intent对象获取传递的数据和操作。...类,通过判断接收到的广播类型进行相应的操作。...可以通过setResultCode()和getResultCode()方法设置和获取广播的结果代码。 在开发过程中要避免在BroadcastReceiver中进行耗时操作,因为它们是在主线程上执行的。
也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。...在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能; 当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作...Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了, 大大减少了开发的工作量和开发周期。...所以,记得在特定的地方执行解除注册操作: ? 执行这样行代码就可以解决问题了。注意,这种注册方式与静态注册相反,不是常驻型的,也就是说广播会跟随程序的生命周期。...上面的例子只是一个接收者来接收广播,如果有多个接收者都注册了相同的广播地址,又会是什么情况呢,能同时接收到同一条广播吗,相互之间会不会有干扰呢?这就涉及到普通广播和有序广播的概念了。
当用户在发出意图使之销毁时会经历onDestory而bindService方式启动,与Activity绑定的时候,会经历onCreate和onBind,而当Activity被销毁的时候,Service会先调用...而后者由于与Activity绑定,不用考虑其生命周期问题,并且从发送Intent的被动操作,变为可以主动对Service对象进行操作,我们深圳可以建立一个Handler类,对Service进行相关的操作...优先级别声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority...3.2广播接收者的响应 在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并执行onReceive() 方法, onReceive() 方法执行完后,BroadcastReceiver...所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框。
启动服务 Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),可以启动服务执行一次性操作(例如,下载文件)。...发送广播 广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。...需要注意的是,使用Intent开启Activity和开启Service只有两个方法,而开启BroadcastReceiver有多个方法。...使用这种方式开启的Activity,意图非常明显,因此称之为显式Intent,也叫做显式意图。 02隐式Intent 没有明确指定组件名的Intent称为隐式Intent,又叫隐式意图。...隐式 Intent启动Activity的示意图如下图所示。 ? 在上图中,Activity A 创建包含操作描述的 Intent,并将其传递给 startActivity()。
这就会有个问题,如果想让发送的广播只有我自己能收到,不想被别人劫持到,来获取到广播中的敏感信息。 另外其他人如果发送相同Action的广播来伪造真正的广播,就会欺骗我的receiver。...当应用程序注册了某个广播时,即便设置了IntentFilter还是会接收到来自其他应用程序的广播进行匹配判断。...permission,对于静态注册的广播可以通过android:exported=“false"属性表示接收者对外部应用程序不可用,即不接受来自外部的广播。...可以猜测到这个Handler正是用于对广播的分发。 广播的注册、反注册、发送流程 如果让我们来自己来实现广播的注册、反注册、发送我们会怎么搞呢?...LocalBroadcastManager所发送的广播action,只能与注册到LocalBroadcastManager中BroadcastReceiver产生互动。
一、Broadcast(广播) 在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。...,即不建议执行耗时操作 注:在广播接收器中创建子线程执行耗时操作也是不建议使用的,因为一旦广播接收器被销毁(太容易被销毁了,生命周期太短),子线程就成为了空线程,很容易被系统杀死 2、自定义BroadcastReceiver...")); 注: Android中所有与观察者模式有关的设计中,一旦涉及到register,必定需要unregister。...当此Activity实例化时,会动态将RootReciver注册到系统中。当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。...4、发送广播 广播 其实是以 意图(Intent)的形式表示的 发送广播 就是 通过广播发送者将”意图“(意图包含action 附带数据)发送出去。
这意味着您的应用程序在UI线程中执行的任何操作都需要很长时间才能完成,因为您的应用程序没有给自己处理输入事件或意图广播的机会。 因此,在UI线程中运行的任何方法都应该在该线程上尽可能少地工作。...BroadcastReceiver 执行时间的具体约束强调广播接收器的意图:在后台进行小的,离散的工作量,例如保存设置或注册 Notification。...但是,与其通过辅助线程执行密集任务,您的应用程序还应该启动IntentService如果需要对意图广播采取可能长时间运行的操作。...有关如何启用和禁用的更多信息,请参见BroadcastReceiver对象,请参见按需操纵广播接收机....提示: 您可以使用 StrictMode 帮助查找可能长时间运行的操作,例如您可能在主线程上意外执行的网络或数据库操作。 加强响应能力 通常,100到200ms是用户将感知应用程序缓慢的阈值。
、开机启动完成)作为一个广播消息发送其他的接收者; android应用程序里面的收音机:自己写的一个广播接收者的一个类。...广播接受者案例_ip拨号器(重点) 开发广播接收者的步骤: 1、买个收音机: public class OutCallBroadCastReceiver extends BroadcastReceiver...", 0).show(); } } } 发送自定义广播 创建广播电台的步骤: //创建一个传递消息的意图对象 Intent intent = new Intent(); //...就能接收到的广播; //发送一个广播消息(无序广播) sendBroadcast(intent); 有序广播: 当广播把消息发送出去后,消息会根据广播接收者的优先级从高到低一级一级地下发消息。...//发送一个有序的广播 //intent 意图 //permission 指定接收者需要添加了权限 //resultReceiver 指定哪个广播接收者最后接到消息 //scheduler 消息处理器
领取专属 10元无门槛券
手把手带您无忧上云