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

广播接收器onReceive()不工作

广播接收器onReceive()不工作是指在Android开发中,当注册的广播接收器接收到广播时,onReceive()方法没有被调用或者没有执行预期的操作。

可能的原因和解决方法如下:

  1. 注册问题:检查广播接收器是否正确注册。确保在AndroidManifest.xml文件中声明了接收器,并且设置了正确的intent-filter。例如,如果你想接收系统启动完成的广播,需要添加以下代码:
代码语言:txt
复制
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
  1. 权限问题:某些广播需要特定的权限才能接收。例如,接收网络状态变化的广播需要添加以下权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

确保你的应用程序具有所需的权限。

  1. Context问题:确保在注册广播接收器时使用了正确的Context。如果在Activity中注册广播接收器,应该使用Activity的Context。如果在Service中注册广播接收器,应该使用Service的Context。
  2. 广播发送问题:检查广播发送的代码是否正确。确保发送的广播的Action与接收器注册的Action匹配。
  3. 其他问题:如果以上方法都没有解决问题,可能是其他原因导致的。可以尝试使用日志输出或调试工具来检查代码执行过程中是否有异常或错误。

总结起来,当广播接收器的onReceive()方法不工作时,需要检查注册、权限、Context、广播发送等方面的问题。如果问题仍然存在,可以进一步调试和排查可能的错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android基础总结(4)——广播接收器

创建广播接收器的方法很简单,我们只需要新建一个类,让它继承自BroadcastReceiver,并重写父类的onReceive()方法就行了。...这样当有广播到来时,onReceive()方法就会得到执行,具体的逻辑可以在这个方法中进行处理。...不要在广播接收器onReceive()方法中添加过多的逻辑或者进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行太长时间而没有结束时,系统会报错。...然后在广播接收器onReceive()方法中通过getIntent()方法来获取Intent,并取出相应的数据。...,我们可以在我们的广播接收器中的onReceive()方法的逻辑中对该广播进行截断,截断广播的方法也很简单,直接调用abortBroadcast();方法就可以了。

1K100

Broadcasts详解「建议收藏」

例如,当一个进程正在运行一个广播接收器(即执行onReceive()方法中的代码),那么它被认为是一个前台进程,它会保持正常运行,除开系统有极端内存压力。...为了避免这种情况,如果你想用更多时间在后台线程中处理广播,那么你应该调用goAsync()或JobService来让系统知道进程要继续执行一些工作。...下面的代码显示了一个BroadcastReceiver使用goAsync()标志onReceive()返回后,它需要更多的时间来处理广播。...6、 因为一个接收器onReceive(Context, Intent)方法在主线程上运行,它应该快速执行并返回。...这会让Receiver在onReceive()返回后保持Active。然而,即使采用这种方法,系统也希望您能在10秒内完成广播。它允许你把工作移动到另一个线程中,避免阻塞主线程。

76310

【Android】Broadcasts详解

静态广播接收器 要定义一个静态广播接收器,执行下面的步骤: 当应用程序安装的时候,软件包管理器会在系统中注册广播接收器。...比如,当一个进程执行一个广播接收器(执行onReceive()方法中的代码),它会被当作一个前台进程。除非内存极度匮乏,否则系统会一直让该进程运行。...然而,一旦从onReceive()返回,广播接收器就不再处于激活状态,它的宿主进程也就跟其它的普通进程具有相同的优先级。...鉴于这个原因,你不应该在一个广播接收器中启动一个长时间在后台运行的线程。当从onReceive()返回后,系统可能会杀掉进程来回收内存,这会结束所有运行在这个进程中的线程。...本地广播更加高效(无需进程间通信),并且你无须考虑由于其它应用接收你的广播而带来的安全问题。本地广播可以在增加系统范围内广播数量的前提下实现一个应用内部的发布/订阅事件通道。

76220

Android入门教程 | 广播机制 Broadcast

注册为本地广播接收器无法收到标准广播。 带权限的广播 发送广播时可以带上相关权限,申请了权限的 App 或广播接收器才能收到相应的带权限的广播。...接收广播 创建广播接收器,调用onReceive()方法,需要一个继承 BroadcastReceiver 的类。 注册广播 代码中注册称为动态注册。...动态注册的刚波接收器一定要取消注册。在onDestroy()方法中调用unregisterReceiver()方法来取消注册。 不要在onReceive()方法中添加过多的逻辑操作或耗时的操作。...因为在广播接收器中不允许开启线程,当onReceive()方法运行较长时间而没结束时,程序会报错。因此广播接收器一般用来打开其他组件,比如创建一条状态栏通知或启动一个服务。...(3)注册发送后,在BroadcastReceiver(自定义一个接收器继承自BroadcastReceiver)的onReceive中接收广播并处理广播。 6.

1.6K30

Android 四大组件之BroadcastReceiver

广播接收器接收到相应广播后,会自动回调 onReceive() 方法,此方法中可与其他组件进行交互,如发送通知、启动服务等。...默认情况下,广播接收器运行在主线程中,所以,onReceive() 方法不能执行耗时操作,否则会导致 ANR 异常。 5.2 注册广播接收器 广播接收器的注册分为两种:静态注册、动态注册。...当然,一般情况下,建议对有序广播进行此类操作,尤其是针对系统中的有序广播。...(Sticky Broadcast) 由于在 Android 5.0 & API 21 中已经失效,所以建议使用,在这里不作阐述。...特别注意 对于不同注册方式的广播接收器回调 onReceive(Context context,Intent intent)中的context返回值是不一样的: 1.对于静态注册(全局+应用内广播),回调

1.3K10

Android:BroadcastRecevicer广播类型汇总

); //发送广播 sendBroadcast(intent); 若被注册了的广播接收者中注册时intentFilter的action与上述匹配,则会接收此广播(即进行回调onReceive())。...; 在广播发送和接收时,增设相应权限permission,用于权限验证; 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。...通过intent.setPackage(packageName)指定报名 具体使用2 - 使用封装好的LocalBroadcastManager类 使用方式上与全局广播几乎相同,只是注册/取消注册广播接收器和发送广播时将参数的...粘性广播(Sticky Broadcast) 由于在Android5.0 & API 21中已经失效,所以建议使用,在这里也不作过多的总结。 ---- 6....特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

4K41

Android 广播机制(Broadcast)介绍与使用

同一时刻只有一个广播接收器能接收到这条广播。这个接收器处理完后,广播才会继续传递。 有序广播是全局的广播。 本地广播(Local Broaddcasts) 只在本App发送和接收的广播。...注册为本地广播接收器无法收到标准广播。 带权限的广播 发送广播时可以带上相关权限,申请了权限的App或广播接收器才能收到相应的带权限的广播。...如果在manifest中申请了相应权限,接收器可以不用再申请一次权限即可接到相应广播。 接收广播 创建广播接收器,调用onReceive()方法,需要一个继承BroadcastReceiver的类。...不要在onReceive()方法中添加过多的逻辑操作或耗时的操作。因为在广播接收器中不允许开启线程,当onReceive()方法运行较长时间而没结束时,程序会报错。...接收器接到有序广播后,可以完全地截断广播,或者传递一些信息给下一个接收器。 有序广播的顺序可受android:priority标签影响。同等级的接收器收到广播的顺序是随机的。

2.9K30

Carson带你学Android:手把手教你学会广播组件-BroadcastReceiver

基类 必须复写抽象方法onReceive()方法 广播接收器接收到相应广播后,会自动回调 onReceive() 方法 一般情况下,onReceive方法会涉及 与 其他组件之间的交互,如发送Notification...、启动Service等 默认情况下,广播接收器运行在 UI 线程,因此,onReceive()方法不能执行耗时操作,否则将导致ANR 代码范例 mBroadcastReceiver.java // 继承...; 在广播发送和接收时,增设相应权限permission,用于权限验证; 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。...粘性广播(Sticky Broadcast) 由于在Android5.0 & API 21中已经失效,所以建议使用,在这里也不作过多的总结。 6....特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

63610

Carson带你学Android:BroadcastRecevicer广播类型汇总

前言 BroadcastReceiver(广播接收器),属于 Android 四大组件之一,在 Android 开发中,BroadcastReceiver 的应用场景非常多。...); //发送广播 sendBroadcast(intent); 若被注册了的广播接收者中注册时intentFilter的action与上述匹配,则会接收此广播(即进行回调onReceive())。...; 在广播发送和接收时,增设相应权限permission,用于权限验证; 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。...粘性广播(Sticky Broadcast) 由于在Android5.0 & API 21中已经失效,所以建议使用,在这里也不作过多的总结。 6....特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

46420

Android四大组件:BroadcastReceiver史上最全面解析

接下来我将一步步介绍如何使用 4.1 自定义广播接收者BroadcastReceiver 继承自BroadcastReceivre基类 必须复写抽象方法onReceive()方法 广播接收器接收到相应广播后...,会自动回调onReceive()方法 一般情况下,onReceive方法会涉及与其他组件之间的交互,如发送Notification、启动service等 默认情况下,广播接收器运行在UI线程,因此,onReceive...@Override public void onReceive(Context context, Intent intent) { //写入接收广播后的操作 } } 4.2 广播接收器注册...粘性广播(Sticky Broadcast) 由于在Android5.0 & API 21中已经失效,所以建议使用,在这里也不作过多的总结。 ---- 5....特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

1.5K10

安卓开发_深入理解广播机制

自定义广播接收器接收到相应广播后,会自动回调onReceive(context, intent)方法。 onReceive方法中不能执行太耗时的操作。否则将因此ANR。...原因如下: (1)广播接收器的生命周期是非常短暂的,当广播接收器接收到广播时开始创建,而执行完onReceive(context,intent)方法后就销毁 (2)默认情况下,广播接收器也是运行在UI线程中的...,即建议执行耗时操作 注:在广播接收器中创建子线程执行耗时操作也是建议使用的,因为一旦广播接收器被销毁(太容易被销毁了,生命周期太短),子线程就成为了空线程,很容易被系统杀死 2、自定义BroadcastReceiver...,则一个广播发过来之后,优先级为100的广播接收器先接受,然后优先级0的广播接收器接收, 最后优先级为-100的广播接收器再接受,但是当优先级为100的广播接收器onReceive()方法内部执行了abortBroadcast...后两个广播接收器都无法再接受此广播了 4、粘性广播(查了下子类,粘性广播已被放弃,过时) 粘性广播的特点为: 会一直保留到广播事件结束,没有所谓的10秒限制 但是当接收此广播广播接收器onReceive

1.4K70

全局事件-广播(Broadcast)

而负责接收Broadcast数据的接收器却永远不知道什么时候可以接收到广播。...---- 接收系统广播 短信拦截(静态注册) 1 编写广播接收器类,继承自android.content.BroadcastReceiver类 ShortMessageReceiver.java package...必须要指定 我们编写的短信接收器才可以接收系统的短信广播,切记 配置权限android.permission.RECEIVE_SMS 即使注册广播接收器的程序关闭,接收器仍然会接收到广播,除非从模拟器或者手机中卸载程序或者注销接收器...,否则无法阻止接收器接收广播 ---- 用代码注册广播接收器 如果在清单文件中配置广播接收器,程序安装后就会自动注册广播接收器,如果想在适当的时候注册广播接收器,在使用完成之后将其注销就需要使用Java...,对于同一个应用程序中的广播接收器会按照在Manifest清单文件中定义的顺序调用。

1.1K60

Android 全局广播的使用

广播按照接收的有序性可以分为有序广播和无序广播,无序广播就是一个广播信息发送出去之后,能够接收到这个信息的广播接收器会同时接收到这条广播信息,而有序广播就是按照广播接收器的优先级高低依次接收广播信息,并且广播传送过程中在广播接收器中可以终止广播的传送...,但是没有动态注册那么灵活,而动态注册则是广播接收器直接在代码中完成注册,比较灵活,但是必须要等待程序运行并且注册了这个广播接收器之后,这个广播接收器才能接收广播信息(其实很好理解,就是要等到广播接收器完成注册之后才能接收广播信息...void onReceive(Context context, Intent intent) { Toast.makeText(context, "优先级较低的广播接收器接收到的广播信息...} } 我们添加了一个广播接收器的内部类,并且实现了onReceive方法,并且在注册广播接收器的时候在IntentFilter的对象中设置了优先级属性,在发送广播的时候使用了sendOrderBroadcast...运行程序,单击按钮,我们会看到两个广播接收器都接受到了广播信息,但是如果我们在第一个广播接收器onReceive方法中加入一行代码:abortBroadcast(); ?

2K10

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

广播发出之后,同一时刻只有一个广播接收器能够收到这条广播消息,当其逻辑执行完后该广播接收器才会继续传递。...如果比他优先级高的接受者终止广播, 那么他的 onReceive 会执行两次 第一次是正常的接收 第二次是最终的接收 如果优先级高的那个终止广播, 那么他还是会收到一次最终的广播 1.2.4 常见的广播接收者运用场景...自定义广播接收器需要继承基类 BroadcastReceiver ,并实现抽象方法 onReceive ( context, intent ) 。...默认情况下,广播接收器也是运行在主线程,因此 onReceiver() 中不能执行太耗时的操作( 超过 10s ),否则将会产生 ANR 问题。...; 广播接收者通过消息循环拿到此广播,并回调 onReceive() 方法。

1.5K31

使用广播-BroadcastReceiver最详细解析

~ 普通广播: Normal broadcasts,是一种完全异步执行的广播,当广播发出后,几乎所有广播接收器都会在同一时间收到这条广播。...有序广播: 有序广播,Ordered broadcasts,是一种同步执行的广播广播发出后,只会有一个广播接收器能接收到广播消息,当这个广播接收器接收到后,广播才会继承传递,对于有序广播有了先后顺序,...广播注册分动态和静态两种: 动态注册,需要继承BroadcastReceiver的,并重写onCreate()方法,和onReceive()方法,在onReceive()方法中,要实例接收器和IntentFilter...在动态注册的广播接收器中最后一定要取消注册。...> 这里补充说一个自定义的广播接受者 步骤:同样 继承BroadcastReceiver基类 复写抽象方法onReceive()方法 以上为发送普通广播的实现形式,那么你还记得一个有序广播吗?

53620

Android学习--广播机制

广播机制简介 ----         Android的广播可以分为两种类型的,标准广播和有序的广播;         标准广播:  是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播...当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递,所以这个时候的广播接收器是有先后顺序的,优先级高的广播接收器就可以先接收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样的话后面广播接收器就不能接收到广播消息了...其实也很简单,让它继承自 BroadcaseReceiver ,并重写父类的 onReceive() 方法就行了,这样当有消息来临的时候onReceive()方法得到执行。...另外:我们创建的StaticReceiver里面的代码我们就不看了,也就是一个onReceive方法,有一点需要我们注意的,不管是静态还是动态都需要我们注意的点是: 注意一下,onReceive方法里面不要写过多的逻辑代码或者换进行其他的耗时操作...、因为在广播接收器中是不允许开始新的线程的,要是这个方法长时间的没有响应,程序就会报错。

56050

从0系统学Android--5.1 广播机制

有序广播:是一种同步执行的广播,在广播发出后,同一时刻只有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后广播才会继续传播。...首先要创建一个广播接收器。...新建一个类,让他继承 BoradcastReceiver 并重写 onReceive() 方法,当接受到广播后就会执行 onReceive() 方法,这样一个简单的广播接收器就创建好了。...enable 的意思就是启用这个广播接收器。 通过 action 标签指定要接受的广播。...注意: 广播接收器 onReceive() 方法里面不要做太多的逻辑或者任何的耗时操作,因为在广播接收器中是不允许开启线程的,并且如果 onReceive() 方法运行了较长时间而没有结束的话程序就会报错

47240
领券