(Android开发辅助工具)动态广播注册解注工具
发布日期:2021-08-29 00:27:04 浏览次数:10 分类:技术文章

本文共 3339 字,大约阅读时间需要 11 分钟。

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

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
, BroadcastReceiver> MAPS = new ArrayMap
, 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这样的组件的创建销毁方法进行关联,以达到我们更简便的目的。

转载地址:https://blog.csdn.net/weixin_33975951/article/details/89871962 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:OWA管理之一HTTPS实现OWA表单
下一篇:EX2010与EX2013共存迁移05-公网切换

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月12日 18时06分04秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章