`
charlotte
  • 浏览: 124018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

静态注册的receiver也是可以关闭滴

阅读更多

最近做了个demo,用到广播,目的是监听蓝牙连接是否断开。断开时,弹出对话框告知已断开。


开始的时候当连接断开时发出警告用的是AlertDialog,这个东西必须是由activity创建,而我有多个activity。于是就悲催的在N个Activity里注册and销毁receiver(这是有多彪啊)。。。。


而当你真正收到连接断开的时候其实早800年前就被断开了,这个时间差内,再读写之类的会有异常,这时就要有自定义广播~~于是我凌乱了。


凌乱之后,又自定义过滤器,静态注册接收器。这时AlertDialog的问题出现了。我又不淡定了,又是一阵凌乱后,发现再写个activity设置成dialog,再设置透明神马的不就OK(之前是有多蠢啊)。当收到广播的时候转到alertactivity,为了避免多次弹出对话框,在AndroidManifest.xml里设置了单例。


本以为这就完了,但是发现这个静态注册的广播在进程都kill了还在那给我提示,疯了。。。

各种去 groups.google上搜贴无果后各种看api,发现AndroidManifest中receiver里的enable属性,属性描述如下:


Whether or not the broadcast receiver can be instantiated by the system — "true" if it can be, and "false" if not. The default value is "true".The <application> element has its own enabled attribute that applies to all application components, including broadcast receivers. The <application> and <receiver> attributes must both be "true" for the broadcast receiver to be enabled. If either is "false", it is disabled; it cannot be instantiated.


水平太烂凑活瞎理解吧。。想着干脆得到PackageManager后直接把application的enable制成false,结果是收不到广播了,程序也再启动不起来了(这个应该可以解决,下面再说)。。,无奈~


继续看,看到setComponentEnabledSetting,描述如下:


Set the enabled setting for a package component (activity, receiver, service, provider). This setting will override any enabled state which may have been set by the component in its manifest.

觉得可行就,先得到receiver这个组件后把他的enable制成false,广播关闭了。but下次程序启动的时候广播木有了,真的木有了啊~~~百思不得其解

最终把AndroidManifest里receiver的enable属性显示声明成true,这次可以了。

觉得之前如果把在AndroidManifest里把application的enable属性也显示声明成true,也应该可以,不过没有试。



 

分享到:
评论
2 楼 jamkier 2014-07-19  
getPackageManager().setComponentEnabledSetting(new ComponentName(this, NetworkBroadcast.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); //设置静态全局网络监听广播失效
1 楼 阿狸爱吃potato 2013-02-13  
楼主好~
我也想编个小程序检测蓝牙连接断开 一直找不到合适的方法
楼主能方便把源码发给我参考一下吗?
这是我的邮箱:obliviate_pixie@163.com
谢谢谢谢!!感激不尽!!

相关推荐

    广播(静态注册)

    静态注册是在AndroidManifest.xml文件中对广播接收器进行声明,这使得广播接收器在应用程序启动时就会被系统加载,即使应用没有运行,只要设备接收到匹配的广播,系统也会唤醒广播接收器进行处理。这种方式提供了更...

    开机自启demo(静态注册广播接收器)

    静态注册的优点在于其始终处于监听状态,但缺点是会消耗更多资源,因为即使不需要接收广播,它也会一直运行。 2. **开机自启**: 开机自启是指当Android设备启动完成后,我们的应用能够自动执行某些操作,如启动...

    EventReceiver注册工具EventReceiver注册工具

    标题"EventReceiver注册工具EventReceiver注册工具"明确指出,这个工具是专门用于注册事件接收器的。在SharePoint环境中,事件接收器通常是以DLL动态链接库的形式存在,包含了处理各种SharePoint事件的代码。但是,...

    Android-Android8.0Broadcast静态注册自动转为动态注册

    1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,启动时系统会自动创建Receiver实例,即使应用不在后台运行也能接收到广播。这种方式简单便捷,但可能导致内存泄漏和不必要的资源消耗。 2. 动态...

    Android的广播Receiver动态注册和静态注册示例

    3. 静态注册的Receiver是常驻型,即使应用关闭,仍能接收广播。 4. 同等优先级下,先启动的Receiver会先接收到广播。 在示例中,作者创建了一个包含三个按钮的界面,分别用于发送自定义动态注册广播、自定义静态...

    深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    动态注册的Receiver优先级较低,但在同一优先级下,动态注册的Receiver可以先于静态注册的Receiver接收到广播。 5. 有序广播下的比较: 在有序广播中,静态注册的Receiver可以设置更高的优先级,从而在其他Receiver...

    072集-静态和动态注册广播接收者

    在Android开发中,广播接收者(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或自定义广播事件。本视频教程“072集-静态和动态注册广播接收者”深入探讨了这两种不同的注册方式及其应用场景...

    完美卸载 Citrix Receiver

    您可以使用 Windows 的“程序和功能”实用工具(添加/删除程序)卸载 Receiver。 注意:如果曾使用 Citrix Receiver Updater 安装 Receiver,请勿使用此方法。 在某些情况下,卸载 Receiver for Windows 不会删除...

    Receiver卸载

    Citrix Receiver是一款由Citrix公司开发的远程桌面访问软件,它允许用户从任何地方通过互联网安全地访问企业内部的应用程序和资源。Receiver卸载过程有时可能会遇到问题,尤其是在多版本交替使用或尝试重新安装时,...

    Android 广播案例(静态注册跟动态注册都有)

    在Android系统中,广播(Broadcast)是一种...在实际开发中,结合静态注册和动态注册的使用,可以更好地实现应用间的通信和系统的事件响应。现在,你可以参考提供的“Android广播的使用”相关资料,进一步学习和实践。

    Sender-receiver 消息

    Receiver通常是消息的接收端,虽然在提供的代码片段中Receiver部分没有完全给出,但通常Receiver也会使用JNDI查找队列,并创建`QueueConnection`、`QueueSession`和`MessageListener`。Receiver通过注册`Message...

    android 广播 receiver的讲解

    静态注册的Receiver会在系统启动时自动激活,而动态注册的Receiver则需要在运行时通过Context的registerReceiver方法进行激活。当一个BroadcastIntent被发送时,所有匹配该Intent的Receiver都会接收到广播通知,然后...

    Android实现静态广播监听器的方法

    静态广播监听器是Android系统中用于接收广播的一种方式,与动态注册的广播接收器相比,静态注册的监听器在应用启动之前就能接收到广播,提供了更稳定的广播接收服务。 首先,我们来看如何实现一个静态广播监听器。...

    在运行时管理Manifest Receiver

    1. **灵活性**:可以在应用的任何时刻注册和注销Receiver,使得Receiver的生命周期更灵活。 2. **资源管理**:不需要的时候注销Receiver,可以降低应用的内存占用,提高性能。 3. **安全**:可以限制Receiver接收到...

    广播BroadcastReceiver静态动态有序广播

    **静态注册广播**则是在AndroidManifest.xml文件中进行的,这样广播接收器即使在应用未运行时也能接收到广播。这种方式适用于需要始终监听特定事件的情况,但缺点是会增加应用的内存占用。在manifest文件中的配置...

    citrix receiver 清理工具

    通过运行ReceiverCleanupUtility.exe,用户可以安全地移除Citrix Receiver的所有组件,包括注册表项、配置文件以及存储在不同系统位置的相关数据。 ReceiverCleanupUtility.exe是这个清理工具的执行文件,通常在...

    ReceiverLib

    - 静态注册:在AndroidManifest.xml文件中声明Receiver,这样即使应用不在运行状态,只要广播事件发生,Receiver也能接收到。但是,静态注册的Receiver会增加系统的负担,因为它们始终占用系统资源。 - 动态注册:在...

    trap receiver(trap模拟接收器)

    在调试过程中,你可以通过改变代理的配置或者触发不同的事件来观察Trap Receiver是如何响应的。这有助于理解陷阱的工作机制,以及你的SNMP代理在不同情况下是否能正确报告问题。 总的来说,"Trap Receiver (Trap...

    第八章_Android广播事件处理Broadcast_Receiver

    - **其他事件**:如屏幕亮灭、USB插拔等事件也可以通过广播的形式通知应用。 #### 知识点六:注意事项 1. **权限管理**:对于某些敏感的广播类型,如开机启动广播等,可能需要申请特定的权限。 2. **性能考虑**:...

Global site tag (gtag.js) - Google Analytics