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

广播接收器onReceive在片段中不起作用

可能是由于以下几个原因:

  1. 注册问题:确保在片段中正确注册广播接收器。可以在片段的onCreate()方法中使用registerReceiver()方法注册广播接收器,并在onDestroy()方法中使用unregisterReceiver()方法取消注册。
  2. 上下文问题:在片段中注册广播接收器时,应该使用片段的上下文而不是活动的上下文。可以使用getActivity()方法获取片段的上下文,并将其传递给registerReceiver()方法。
  3. 过滤器问题:检查广播接收器的过滤器是否正确设置。广播接收器的过滤器应该与发送广播时的意图过滤器匹配。可以使用IntentFilter类来设置广播接收器的过滤器,并在注册广播接收器时将其传递给registerReceiver()方法。
  4. 广播发送问题:确保广播发送的意图与广播接收器的过滤器匹配。可以使用sendBroadcast()方法发送广播,并确保发送的意图与广播接收器的过滤器匹配。
  5. 片段生命周期问题:如果广播接收器在片段的生命周期方法之外被触发,可能会导致不起作用。确保广播接收器的注册和取消注册在片段的正确生命周期方法中进行,如onCreate()和onDestroy()。

总结起来,要解决广播接收器onReceive在片段中不起作用的问题,需要正确注册广播接收器,使用正确的上下文,设置正确的过滤器,确保广播发送的意图匹配,以及在正确的片段生命周期方法中进行注册和取消注册。

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

相关·内容

【Android】Broadcasts详解

CONNECTIVITY_ACTION 接收广播 应用程序可以使用两种方式接收广播应用清单定义一个广播接收器程序中注册一个广播接收器。...比如,当一个进程执行一个广播接收器(执行onReceive()方法的代码),它会被当作一个前台进程。除非内存极度匮乏,否则系统会一直让该进程运行。...如果那个进程只拥有一个应用清单定义的接收器,那么当从onReceive()返回后,系统会把它当作一个低优先级的进程,当其它优先级更高的进程需要更多内存的时候,它就可能被杀掉。...鉴于这个原因,你不应该在一个广播接收器启动一个长时间在后台运行的线程。当从onReceive()返回后,系统可能会杀掉进程来回收内存,这会结束所有运行在这个进程的线程。...为了避免这种情况,你要么调用goAsync()(如果你希望能够长时间在后台线程运行广播接收器),要么接收器中使用JobScheduler调度一个JobService。

81920
  • 全局事件-广播(Broadcast)

    而负责接收Broadcast数据的接收器却永远不知道什么时候可以接收到广播。...必须要指定 我们编写的短信接收器才可以接收系统的短信广播,切记 配置权限android.permission.RECEIVE_SMS 即使注册广播接收器的程序关闭,接收器仍然会接收到广播,除非从模拟器或者手机卸载程序或者注销接收器...,否则无法阻止接收器接收广播 ---- 用代码注册广播接收器 如果在清单文件配置广播接收器,程序安装后就会自动注册广播接收器,如果想在适当的时候注册广播接收器使用完成之后将其注销就需要使用Java...android.intent.action.BOOT_COMPLETED" /> intent-filter> receiver> 如果不设置优先级别,对于同一个应用程序广播接收器会按照在...,只能通过代码的以动态的方式注册,如果在清单文件配置,则不起作用

    1.1K60

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

    广播发出之后,所有广播接收器几乎都会在同一时刻接收到这条广播消息,它们之间没有任何先后顺序,广播的效率较高。...广播发出之后,同一时刻只有一个广播接收器能够收到这条广播消息,当其逻辑执行完后该广播接收器才会继续传递。...自定义广播接收器需要继承基类 BroadcastReceiver ,并实现抽象方法 onReceive ( context, intent ) 。...,对于广播 CONNECTIVITY_ACTION 必须在代码中使用 registerReceiver 方法注册接收器 AndroidManifest 文件声明接收器不起作用。...不要在 onReceiver() 方法添加过多的逻辑或者进行任何的耗时操作,因为广播接收器是不允许开启线程的,当 onReceiver() 方法运行了较长时间而没有结束时,程序就会报错。

    1.6K31

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

    有序广播:Ordered broadcast,是一种同步执行的广播广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播,当这个广播接收器的逻辑执行完毕后,广播才会继续传递。...不要在广播接收器onReceive()方法添加过多的逻辑或者进行任何耗时操作,因为广播接收器是不允许开启线程的,当onReceive()方法运行太长时间而没有结束时,系统会报错。...然后广播接收器onReceive()方法通过getIntent()方法来获取Intent,并取出相应的数据。...,我们可以我们的广播接收器onReceive()方法的逻辑对该广播进行截断,截断广播的方法也很简单,直接调用abortBroadcast();方法就可以了。...5、广播接收器启动活动   广播接收器也可以启动一个活动,但是我们启动活动之前必须给intent加入FLAG_ACTIVITY_NEW_TASK标志,否则将无法启动。

    1.1K100

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

    如果在manifest申请了相应权限,接收器可以不用再申请一次权限即可接到相应广播。 接收广播 创建广播接收器,调用onReceive()方法,需要一个继承BroadcastReceiver的类。...onDestroy()方法调用unregisterReceiver()方法来取消注册。 不要在onReceive()方法添加过多的逻辑操作或耗时的操作。...因为广播接收器不允许开启线程,当onReceive()方法运行较长时间而没结束时,程序会报错。因此广播接收器一般用来打开其他组件,比如创建一条状态栏通知或启动一个服务。...接收器manifest申请了相应权限时才能收到这个广播。...配置文件声明权限,程序才能访问一些关键信息。 例如允许查询系统网络状态。

    3.1K30

    Broadcasts详解「建议收藏」

    例如,当一个进程正在运行一个广播接收器(即执行onReceive()方法的代码),那么它被认为是一个前台进程,它会保持正常运行,除开系统有极端内存压力。...本地广播可以应用程序作为通用的pub/sub event bus使用,而无需任何系统范围的广播开销。...6、 因为一个接收器onReceive(Context, Intent)方法主线程上运行,它应该快速执行并返回。...如果你想用更多时间在后台线程处理广播,请用下面方法来完成: a、 onReceive()调用goAsync(),并且传入BroadcastReceiver.PendingResult。...这会让ReceiveronReceive()返回后保持Active。然而,即使采用这种方法,系统也希望您能在10秒内完成广播。它允许你把工作移动到另一个线程,避免阻塞主线程。

    81410

    Android 全局广播的使用

    广播按照接收的有序性可以分为有序广播和无序广播,无序广播就是一个广播信息发送出去之后,能够接收到这个信息的广播接收器会同时接收到这条广播信息,而有序广播就是按照广播接收器的优先级高低依次接收广播信息,并且广播传送过程广播接收器可以终止广播的传送...静态注册:Android配置文件androidmanifest.xml 完成广播接收器的注册,动态注册:java代码通过registerReceiver方法完成注册,两者各有优缺点,静态注册无需等程序启动就能接收到这个广播接收器能够接收到的广播信息...} } 代码,我们定义了一个内部类MyBroadcastReceiver继承于BroadcastReceiver类并且实现了它的抽象方法onReceive,在这个方法我们添加了接收到广播信息之后的处理...对象的setAction方法的参数时,这个广播信息才能被这个广播接收器接收到(其实就是发送广播的Intent对象的动作类型能够注册广播时的IntentFilter对象存在相同的动作类型时,这个广播接收器才能接收到这个...} } 我们添加了一个广播接收器的内部类,并且实现了onReceive方法,并且注册广播接收器的时候IntentFilter的对象设置了优先级属性,发送广播的时候使用了sendOrderBroadcast

    2K10

    使用广播-BroadcastReceiver最详细解析

    男孩:Broadcast是广播的意思,Android应用程序之间的传输信息的机制,BroadcastReceiver是接收广播通知的组件,广播广播接收器是Android需要了解的,那么怎么样去了解呢...Android中提供了优先级的属性(priority)来控制先后,有序广播可以截断广播,不被下一个广播接收器接收,这是有序广播的特点。...广播注册分动态和静态两种: 动态注册,需要继承BroadcastReceiver的,并重写onCreate()方法,和onReceive()方法,onReceive()方法,要实例接收器和IntentFilter...动态注册的广播接收器中最后一定要取消注册。...简化: 重写onCreate() 重写onDestroy() extends BroadcastReceiver 重写onReceive() 静态注册,只要在配置文件修改代码即可,AndroidManifest.xml

    58120

    监听Android的网络变化

    一、创建广播接收器 首先,我们需要创建一个广播接收器(BroadcastReceiver),用于接收系统发出的网络变化广播本例,我们创建了一个名为ConnectReceiver的广播接收器。...Android 7.0(API 24)及以上版本,静态注册的网络变化广播接收器将不再生效。...因此,我们需要在代码动态注册广播接收器本例,我们registerReceiver()方法中注册了ConnectReceiver。...", e); } } }); } onReceive()方法,我们首先判断收到的广播是否是我们关心的网络变化广播。...然后,代码动态注册广播接收器,并设置监听的网络变化广播。当网络发生变化时,系统会发出相应的广播广播接收器将接收到这些广播并调用onReceive()方法,在这个方法可以处理网络变化。

    28610

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

    前言 BroadcastReceiver(广播接收器),属于 Android 四大组件之一 Android 开发,BroadcastReceiver 的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver...基类 必须复写抽象方法onReceive()方法 广播接收器接收到相应广播后,会自动回调 onReceive() 方法 一般情况下,onReceive方法会涉及 与 其他组件之间的交互,如发送Notification...5.2.2 动态注册 注册方式:代码调用Context.registerReceiver()方法 具体代码如下: // 选择Activity生命周期方法的onResume()中注册...; 广播发送和接收时,增设相应权限permission,用于权限验证; 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包的App内与之相匹配的有效广播接收器。...特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

    65810

    Android学习--广播机制

    广播机制简介 ----         Android的广播可以分为两种类型的,标准广播和有序的广播;         标准广播:  是一种完全异步执行的广播广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播...当这个广播接收器的逻辑执行完毕之后,广播才会继续传递,所以这个时候的广播接收器是有先后顺序的,优先级高的广播接收器就可以先接收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样的话后面广播接收器就不能接收到广播消息了...、Enable 表示是否启用这个广播       创建之后我们需要写的代码全都在AndroidManifest.xml,里面涉及到的问题以及都在下面的代码: ?      ...、因为广播接收器是不允许开始新的线程的,要是这个方法长时间的没有响应,程序就会报错。...为了解决这个问题,安卓就引入了本地广播的概念,本地广播就是发出的广播只能够程序的内部进行床底,并且广播接收器也只能来接收来自本应用程序发出的广播,提高了程序的安全性!

    58250

    Android 四大组件之BroadcastReceiver

    ,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列; 消息循环执行拿到此广播,回调 BroadcastReceiver onReceive() 方法...广播接收器接收到相应广播后,会自动回调 onReceive() 方法,此方法可与其他组件进行交互,如发送通知、启动服务等。...默认情况下,广播接收器运行在主线程,所以,onReceive() 方法不能执行耗时操作,否则会导致 ANR 异常。 5.2 注册广播接收器 广播接收器的注册分为两种:静态注册、动态注册。...发送广播时,指定特定广播接收器所在的包名,具体是通过 intent.setPackage(packageName) 指定,这样此广播将只会发送到此包的 App 内与之相匹配的有效广播接收器。...特别注意 对于不同注册方式的广播接收器回调 onReceive(Context context,Intent intent)的context返回值是不一样的: 1.对于静态注册(全局+应用内广播),回调

    1.4K10

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

    这些广播可能来自系统,也可能来自其他应用程序。 接受广播需要用到Broadcast Receiver 广播接收器。 Android 广播分为两种:标准广播和有序广播。...标准广播:是一种完全异步执行的广播广播发出后几乎所有的接收器都会在同一时刻受到广播消息。因此它们之间没有任何的先后顺序,这种广播效率比较高,但同时意味着不能被截断。...有序广播:是一种同步执行的广播广播发出后,同一时刻只有一个广播接收器能够收到这条广播消息,当这个广播接收器的逻辑执行完毕后广播才会继续传播。...新建一个类,让他继承 BoradcastReceiver 并重写 onReceive() 方法,当接受到广播后就会执行 onReceive() 方法,这样一个简单的广播接收器就创建好了。...注意: 广播接收器 onReceive() 方法里面不要做太多的逻辑或者任何的耗时操作,因为广播接收器是不允许开启线程的,并且如果 onReceive() 方法运行了较长时间而没有结束的话程序就会报错

    49140

    Android:BroadcastRecevicer广播类型汇总

    广播发送和接收时,增设相应权限permission,用于权限验证; 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包的App内与之相匹配的有效广播接收器。...粘性广播(Sticky Broadcast) 由于Android5.0 & API 21已经失效,所以不建议使用,在这里也不作过多的总结。 ---- 6....特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive...(context, intent)的context返回值是:ReceiverRestrictedContext; 对于全局广播的动态注册,回调onReceive(context, intent)的context...对于应用内广播的动态注册(非LocalBroadcastManager方式),回调onReceive(context, intent)的context返回值是:Activity Context;

    4.2K41

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

    前言 BroadcastReceiver(广播接收器),属于Android四大组件之一 Android开发,BroadcastReceiver的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver...(一般情况下是Activity)相应的消息循环队列; 消息循环执行拿到此广播,回调BroadcastReceiveronReceive()方法。...,会自动回调onReceive()方法 一般情况下,onReceive方法会涉及与其他组件之间的交互,如发送Notification、启动service等 默认情况下,广播接收器运行在UI线程,因此,onReceive...; 广播发送和接收时,增设相应权限permission,用于权限验证; 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包的App内与之相匹配的有效广播接收器。...特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

    1.7K10

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

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

    48620

    android学习笔记----自定义广播和系统广播

    自定义广播: 无序广播(标准广播): 是一种异步执行的广播广播发出之后,所有的广播接收器几乎同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。...("name"); Toast.makeText(context, "接受无序广播收到了该内容:" + content, Toast.LENGTH_SHORT).show();...,点击发送无序广播,看到接收方的Toast显示出来了,接收到了广播 有序广播: 是一种同步执行的广播广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器的逻辑执行完毕之后...2、全局广播:发送的广播事件可被其他应用程序获取,也能响应其他应用程序发送的广播事件(可以通过 exported–是否监听其他应用程序发送的广播 清单文件控制) 全局广播既可以动态注册,也可以静态注册...)方法添加过多的逻辑或进行任何耗时操作,因为广播接收器是不允许开启线程的,当onReceive()方法进行了较长时间而没有结束时,程序就会报错。

    1.6K20
    领券