首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BroadcastReceiver详解以及应用

而在Android中的广播机制与现实中一样,发送广播的是Broadcast,接收广播的BroadcastReceiver及广播之间传递数据的Intent。...BroadcastReceiver有两种注册方式: 静态注册(在AndroidManifest.xml清单文件中注册) 动态注册(在代码中注册) 广播接收者静态注册方式 当我们需要一直接收某种广播时...);//IntentFilter对象中添加要接收的关屏广播 filter.addAction(Intent.ACTION_SCREEN_ON);//添加点亮屏幕广播 registerReceiver...所以,监听到屏幕的开关只有在APP运行的状态才可以,但是监听打电话的状态无论此时app是否在运行,都可以监听到。 需要注意:动态注册的广播的优先级大于静态注册的广播。至于这个是为什么呢?...有序广播是支持拦截的,一旦被拦截可以修改广播中数据甚至直接终止广播,这个resultReceiver表示无论当广播传播结束以后我任然会受到广播。

90931

安卓的组件

BroadcastReceiver 概述 BroadcastReceiver 是Android系统中的消息接收器,用于接收来自系统或其他应用程序的广播消息。...处理广播: 在 onReceive 方法中处理接收到的广播消息。 静态和动态注册: 可以在 AndroidManifest.xml 中静态注册,也可以在代码中动态注册广播接收器。...示例代码 kotlin 复制代码 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent...import android.content.IntentFilter class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive...理解和掌握这些组件的工作原理是成为一名合格的Android开发者的关键。 在《第一行代码——Android》中,这些组件都有详细的讲解和实战示例,帮助你更好地理解和应用这些核心概念。

8810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    别告诉我你不认识Android中广播接收者(一)

    当我们手中拿的Android手机电量不足时,屏幕上会提示一条电量不足的信息,这些信息为什么在手机电量不足时会自动弹出来呢?...在Android系统中,广播是一种运用在组件之间传递消息的机制,例如电池电量低时会发送一条提示广播。...如果要接收并过滤广播中的消息,则需要使用广播接收者(BroadcastReceiver),什么是广播接收者呢?...在逻辑代码中这些广播接收者只需要在清单文件或者代码中进行注册并指定要接收的广播事件,然后创建一个继承自BroadcastReceiver的类,重写onReceive()方法,并在该方法中对广播事件进行处理即可...image.png 1.第一种创建方式 在程序的包中创建一个MyBroadcastReceiver类继承自BroadcastReceiver,并重写onReceive()方法,具体代码如下所示。

    33230

    17 个必须掌握的 BroadcastReceiver 知识点「建议收藏」

    文章目录 ---- 方便大家学习,我在 GitHub 上建立个 仓库 ---- 仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。...AndroidManifest 文件中声明接收器不起作用。...1.4 BroadcastReceiver 注册方式 1.4.1 静态注册 在 AndroidManifest.xml 文件中配置。...演示: 在和广播接受者相同的 app 里的 MainActivity 添加一个注册按钮 , 用来注册广播接收者 设置意图过滤,添加 Action //onCreate创建广播接收者对象 mReceiver...---- 由于我在「稀土掘金」「简书」「CSDN」「博客园」等站点,都有新内容发布。所以大家可以直接关注我的 GitHub 仓库,以免错过精彩内容! 仓库地址: 超级干货!

    1.7K31

    全局事件-广播(Broadcast)

    从这种表现形式上看,很像面向对象中的事件(Event),对于事件(onClick、onKeydown)来说,从来不会预知用户什么时候触发他们,只能默默的等待不可预知的事件发生。...方法将这些字节数据组成的数据转换为SmsMessage对象 SmsMessage建议使用android.telephony.SmsMessage中的。...,否则无法阻止接收器接收广播 ---- 用代码注册广播接收器 如果在清单文件中配置广播接收器,程序安装后就会自动注册广播接收器,如果想在适当的时候注册广播接收器,在使用完成之后将其注销就需要使用Java...receiver) 其中receiver表示广播接收器对象, filter参数相当于设置intent-filter标签中的内容。...,只能通过代码的以动态的方式注册,如果在清单文件中配置,则不起作用。

    1.1K60

    从源码角度看广播

    具体解析 再看这张图, 我将从左到右对每个重要图像进行解释: mReceivers: 维护在App中的一个列表,用户存储BroadcastReceiver与ReceiverDispatcher之间的对应关系...调度时,AMS将在system_server端调用它的代理对象binder call到客户端,以在App端触发广播的onReceive方法 mRegisteredReceivers: 动态广播注册的核心对象...中 LoadedApk.Args: 实现了Runnable方法, 静态广播的onReceive方法在这里进行执行 广播的派发是在BroadcastQueue对象中进行的,它维护着并行与串行两个队列。...的代理对象,binder call调用,随后在App中调用BroadcastReceiver.onReceive方法;静态广播的派发是从ResolverInfo对象中取出processName, 再取出...ProcessRecord, 最后在LoadedApk中调用了BroadcastReceiver.onReceive 读懂”adb shell dumpsys activity b” ?

    54540

    Android点将台:传令官(使用级)

    个人所有文章整理在此篇,将陆续更新收录:知无涯,行者之路莫言终(我的编程之路) 零、前言 1.本文的知识点 1).BroadcastReceiver`静态`使用 2).BroadcastReceiver...也没有太大的亮点,作用平平 为了说明他的亮点,现在我们新建一个app:Anotherapp 可以发现在另一个app里也能正常使用这个广播 这就有点意思了,我在A项目中写了一个类,它的方法可以在...B项目中触发 这就是静态广播厉害的地方,也是我第一次接触的跨进程通信 (这说明解耦到一定的境界,就天下与我同,然而我将无处不在,手动滑稽) 二、BroadcastReceiver动态使用 BroadcastReceiver...有序广播的动态注册形式的代码, 静态注册在AndroidManifest.xml里配置类似,就不废话了 还有一点注意的是sendOrderedBroadcast方法调用时传入的BroadcastReceiver...action就行了 五、使用广播更新音乐进度条 在绝命暗杀官[-Service-]中实现过一个音乐播放条,其中音乐的播放进度是靠Handler+回调实现的 BroadcastReceiver本职就在于通知

    12210

    Android面试题:Broadcast需要注意哪些细节

    前言 在android中,广播也是我们经常使用的组件,但是因为大部分使用场景简单,所以关注不多,今天就让我们来探索一下Broadcast。...那么既然onReceive中不能执行耗时操作,我们是否可以在onReceive中开启一个新的线程来处理? 在onReceive中开启新的线程,因为与其生命周期有关,所以下面与生命周期一起来说。...而静态注册的时候,应该与activity等组件类似,(binder机制中)先通过intent条件查找创建Broadcast对象,经过测试每次都是重新创建。...比如我们在menifast中静态注册一个Broadcast,然后通过一个按钮发送这个广播,在Broadcast的onReceive中打印自己的对象的toString,发现每次点击都是一个新的对象来执行。...如果在onReceive中执行耗时操作,如下: public class MyBroadcast extends BroadcastReceiver { @Override public

    31030

    【Android 应用开发】Android之Bluetooth编程

    Android中通过静态注册的屏幕开启和屏幕关闭的BroadCastReceiver为什么捕捉不到广播?...使用静态注册,Debug运行,就是没进到onReceive()方法那里去。我用真机调试的。 但是使用动态注册,又可以捕捉到。我想问,这个系统广播可不可以静态注册?如果可以为什么会捕捉不到呢?...在Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的,你是否在调试时2个都注册了,所以出现你的这种情况;当用来注册动态广播接收器的activity被关闭时,这个动态接收器也就是就失效了...这有点不同于其他的action,你只有在Service中通过动态注册去监听这个事件。...对象 , BluetoothDevice device = bluetoothAdapter.getRemoteDevice(macAddress); 将蓝牙设备对象传入服务中的connect方法中;

    46330

    Broadcasts详解「建议收藏」

    广播消息被封装在一个Intent对象中,用Action字符串标识所发生的事件(例如android.intent.action.AIRPLANE_MODE)。...然后,广播接收器就成为应用程序的一个单独的入口点,即如果应用程序当前没有运行,系统可以通过广播启动应用程序。系统将创建一个新的BroadcastReceiver组件对象来处理每个接收到的广播。...这个对象在调用onReceive(Context, Intent)的时间段内有效,一旦这个方法return,系统就认为该BroadcastReceiver组件不再active,并销毁它。...因此,您不应该在BroadcastReceiver中启动长时间运行的后台线程。onReceive()执行完后,系统可能杀死进程以随时回收内存,并终止运行在这个进程中的线程。...如果你想用更多时间在后台线程中处理广播,请用下面方法来完成: a、 在onReceive()中调用goAsync(),并且传入BroadcastReceiver.PendingResult。

    83610

    Broadcast 使用详解

    Broadcast 本质上是一个Intent 对象,差别在于Broadcast可以被多个 BroadcastReceiver处理。...(静态注册、动态注册) 广播的注册分两种,一种在ndroidMfest.xml中静态注册,另一种是在Java代码中动态注册。...中动态注册广播,通常格式如下: //动态注册广播 registerReceiver(BroadcastReceiver, IntentFilter); 动态注册 监听灭屏、点亮屏幕的广播 在广播中动态注册广播请注意一定要使用...当用户对某些广播感兴趣的话,此时可以获取此广播,然后在onReceive方法中处理接收广播的一下操作。...接受广播类 主要继承 BroadcastReceiver,然后在onReceive方法,过滤广播Action中携带的Intent,然后进行相关处理。 接收开机广播的方法 1.

    1.1K20

    Android插件化原理解析——广播的管理

    我们在分析动态广播的注册过程中发现,动态注册的BroadcastReceiver的相关信息最终存储在此对象之中;在这里,通过mReceiverResolver对象匹配出了对应的BroadcastReceiver...这个IIntentReceiver正是在广播注册过程中由App进程提供给AMS进程的Binder对象,现在AMS通过这个Binder对象进行IPC调用通知广播接受者所在进程完成余下操作。...首先,广播并没有复杂的生命周期,它的整个存活过程其实就是一个onReceive回调;而动态广播又不需要在AndroidManifest.xml中预先注册,所以动态注册的BroadcastReceiver...其实可以当作一个普通的Java对象;我们完全可以用纯ClassLoader技术实现它——不就是把插件中的Receiver加载进来,然后想办法让它能接受onReceive回调嘛。...对于实现静态BroadcastReceiver插件化的问题,有的童鞋或许会想,我们可以借鉴Activity的工作方式——用替身和Hook解决。但是很遗憾,这样是行不通的。为什么呢?

    78020

    安卓基础干货(七):安卓广播的学习

    为什么需要广播接受者 广播: 1、电台:发送一定频道的广播消息,50mhz; 2、收音机:调整到一定频道,接收广播消息; android应用程序里面的电台:系统内置的一个服务,会把事件(电量不足、电量充满...,系统会自动启动广播接收者的进程,调用onReceive方法,接收消息。...", 0).show(); } } } 发送自定义广播 创建广播电台的步骤: //创建一个传递消息的意图对象 Intent intent = new Intent(); //...: String info = getResultData(); System.out.println("---------我是省级人民政府,已经接收到了中央发的消息:"+info); //Toast.makeText...(context, "我是省级人民政府,已经接收到了中央发的消息:"+info, 0).show(); setResultData("国务院开始发放2014年农田补贴:400元"); 补间动画 /**

    4K10

    BroadcastReceiver的思考

    上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity...启动一个Service,然后在Service的onCreate()方法中添加如下代码: try { Log.v(TAG , "sleep start …..");...所以总结一下:无论是 Activity、BroadcastReceiver还是Service,只要是有长时间处理的任务,就需要重新开一个线程来处理,为什么会这样?因为他们都是运行在主线程中的。...在使用BroadcastReceiver时还有一个我们需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )这第一个context...通过傻蛋测试发现: 如果你的BroadcastReceiver是通过在Activity中的this.registerReceiver(myBroadcaster, filter); 来注册的话,那么这个

    53810
    领券