平常我们开发的时候需要使用到动态注册广播,如果在一个类内注册很多的广播代码就会既冗余又乱糟糟的,就像这样:

         msgReceiver = new NewMessageBroadcastReceiver();IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());registerReceiver(msgReceiver, intentFilter);IntentFilter ackMessageIntentFilter = new IntentFilter(EMChatManager.getInstance().getAckMessageBroadcastAction());registerReceiver(ackMessageReceiver, ackMessageIntentFilter);IntentFilter cmdMessageIntentFilter = new IntentFilter(EMChatManager.getInstance().getCmdMessageBroadcastAction());registerReceiver(cmdMessageReceiver, cmdMessageIntentFilter);
newMessageBroadcastReceiver = new NewMessageTipBroadcastReceiver();IntentFilter filter = new IntentFilter(StringConstants.NewMessageBroadcastReceiver);filter.addCategory(Intent.CATEGORY_DEFAULT);registerReceiver(newMessageBroadcastReceiver, filter);disTipBroadcastReceiver = new DisTipBroadcastReceiver();filter = new IntentFilter(StringConstants.DisTipBroadcastReceiver);filter.addCategory(Intent.CATEGORY_DEFAULT);registerReceiver(disTipBroadcastReceiver, filter);

上面是我们的注册部分,除了我们需要将广播的引用升级为类的成员之外,我们还需要添加解注代码,就像下面这样:

         if (newMessageBroadcastReceiver != null) {unregisterReceiver(newMessageBroadcastReceiver);}if (disTipBroadcastReceiver != null) {unregisterReceiver(disTipBroadcastReceiver);}if (mJPushReceiver != null) {unregisterReceiver(mJPushReceiver);}if (newMessageBroadcastReciver != null) {unregisterReceiver(newMessageBroadcastReciver);}if (newTeacherMessageBroadcastReciver != null) {unregisterReceiver(newTeacherMessageBroadcastReciver);}if (newMessageUserCenterBroadcastReciver != null) {unregisterReceiver(newMessageUserCenterBroadcastReciver);}if (mUIRefreshReceiver != null) {unregisterReceiver(mUIRefreshReceiver);}

所以,我们需要一种极为简便的工具来完成这些工作,让我们开发的时候不用去关心那么多不重要的东西:

package com.sahadev.commontools;import java.util.Map;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.util.ArrayMap;/*** 广播注册解注工具* * @author Sahadev**/
public class RegisterReceiverUtils {private static Map<Class<?>, BroadcastReceiver> MAPS = new ArrayMap<Class<?>, BroadcastReceiver>();/*** @param context* @param broadcastReceiverClass* @param action*/public static void registerBroadcastReceiver(Context context, Class<?> broadcastReceiverClass, String action) {IntentFilter filter = new IntentFilter(action);filter.addCategory(Intent.CATEGORY_DEFAULT);try {BroadcastReceiver broadcastReceiver = (BroadcastReceiver) broadcastReceiverClass.newInstance();if (broadcastReceiver != null) {MAPS.put(broadcastReceiverClass, broadcastReceiver);context.registerReceiver(broadcastReceiver, filter);}} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}public static void unregisterBroadcastReceiver(Context context, Class<?> broadcastReceiverClass) {BroadcastReceiver broadcastReceiver = MAPS.get(broadcastReceiverClass);context.unregisterReceiver(broadcastReceiver);MAPS.remove(broadcastReceiverClass);}}

上面这个工具只是简单的对注册解注做了简单的封装,如果可以,我们可以开放开启与关闭方法,与Activity这样的组件的创建销毁方法进行关联,以达到我们更简便的目的。

(Android开发辅助工具)动态广播注册解注工具相关推荐

  1. Android S动态广播注册流程(广播1)

    Android S动态广播注册流程 1. 动态广播注册的流程 2. 新建一个动态广播接收者 3. App部分的registerReceiver 4. system_server侧的广播注册 5. 总结 ...

  2. Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...

    本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...

  3. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  4. Android开发之实现动态打勾效果(DrawHookView)

    android开发之实现动态打勾效果(DrawHookView) 转载于:https://www.cnblogs.com/zhujiabin/p/7498161.html

  5. 华为固件解包工具linux,华为固件解包工具-官方版-华为固件解包工具update.app官方版-独木成林...

    华为官方固件update.app解包工具,用于解包华为官方SD卡刷机包UPDATA.APP,可将APP固件解包成IMG镜像分区文件,继续解包可对刷机包进行定制,可用本工具提取recovery.img. ...

  6. 华为固件解包工具linux,华为固件解包工具

    有些朋友还不知道华为官方SD卡刷机包UPDATA.APP要如何解包?今天小编特意带来这款华为固件解包工具update.app给大家使用,该软件用于解包华为官方SD卡刷机包UPDATA.APP,可将AP ...

  7. 华为固件解包工具linux,华为app解包工具|华为官方APP固件解包工具_华为官方rom_最火软件站...

    这个华为官方ROM解包工具包是在某手机论坛搜集到的,同时附上一个简易的教程,不需要linux环境,直接在window XP/ win7上操作,WIN8测试通过,需要的APP固件解包工具(解压华为ROM ...

  8. Android开发辅助工具类 Utils

    包括了各种工具类.辅助类.管理类等    都可以 在Git  里找到代码 来研究,深入 Awesome_API: https://github.com/marktony/Awesome_API/blo ...

  9. Android开发辅助工具类 Utils 汇总

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

最新文章

  1. winform生命周期(备忘)
  2. 去除字符串中重复字符
  3. Hama笔记:Unable to load native-hadoop library 和 Snappy native library not loaded 的解决
  4. (转)JAVA正则表达式语法大全
  5. 怎么简单的锁定文件夹_简单性与鲁棒性–在锁定文件处理中展示
  6. 【渝粤教育】国家开放大学2018年春季 8638-22T薪酬制度与薪酬管理 参考试题
  7. 数据结构:(6)其他情况的算法分析
  8. 【Python练习题】程序5
  9. nodejs express use 传值_再也不怕面试官问你express和koa的区别了
  10. 华为、三星都崴了脚:石墨烯充电还有戏吗
  11. logback日志配置文件
  12. Android之——AsyncTask和Handler对照
  13. 51Nod1601 完全图的最小生成树计数 Trie Prufer编码
  14. mysql数据库可视化_MySql数据库教程 - 4.可视化操作数据库
  15. EPS清华三维软件操作与数据检查常见问题与解决问题
  16. 图片标注工具LabelImg使用教程
  17. 最新字节跳动面试题之堆排序
  18. oracle写一本日历
  19. Arction图表控件LightningChart振动分析可以检测什么?
  20. 【编程题】【Scratch四级】2021.03 程序优化

热门文章

  1. 在STM32单片机上跑神经网络算法
  2. 我损失几百万换来的教训
  3. 过拟合问题——正则化方法
  4. arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO
  5. Redis核心配置_Redis高级数据类型使用
  6. python数据库连接池_Python实现数据库连接池
  7. 指令系统——数据寻址(3)——堆栈寻址(详解)
  8. LeetCode 2063. 所有子字符串中的元音(数学)
  9. LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )
  10. LeetCode 1727. 重新排列后的最大子矩阵(前缀和+排序)