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

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

			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这样的组件的创建销毁方法进行关联,以达到我们更简便的目的。
上一篇:OWA管理之一HTTPS实现OWA表单
下一篇:EX2010与EX2013共存迁移05-公网切换