package com.lqr.wechat.manager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Parcelable; import java.util.HashMap; import java.util.Map; import retrofit2.adapter.rxjava.HttpException; /** * @创建者 CSDN_LQR * @描述 广播管理 */ public class BroadcastManager { private Context mContext; private static BroadcastManager mInstance; private Map<String, BroadcastReceiver> mReceiverMap; private BroadcastManager(Context context) { mContext = context.getApplicationContext(); mReceiverMap = new HashMap<>(); } public static BroadcastManager getInstance(Context context) { if (mInstance == null) { synchronized (BroadcastManager.class) { if (mInstance == null) mInstance = new BroadcastManager(context); } } return mInstance; } /** * 添加 */ public void register(String action, BroadcastReceiver receiver) { try { IntentFilter filter = new IntentFilter(); filter.addAction(action); mContext.registerReceiver(receiver, filter); mReceiverMap.put(action, receiver); } catch (Exception e) { e.printStackTrace(); } } /** * 发送广播 * * @param action 唯一码 */ public void sendBroadcast(String action) { sendBroadcast(action, ""); } /** * 发送广播 * * @param action 唯一码 * @param obj 参数 */ public void sendBroadcastWithObjct(String action, Object obj) { try { Intent intent = new Intent(); intent.setAction(action); intent.putExtra("result", JsonMananger.beanToJson(obj)); mContext.sendBroadcast(intent); } catch (HttpException e) { e.printStackTrace(); } } public void sendBroadcast(String action, Parcelable obj) { Intent intent = new Intent(); intent.setAction(action); intent.putExtra("result", obj); mContext.sendBroadcast(intent); } /** * 发送参数为 String 的数据广播 * * @param action * @param s */ public void sendBroadcast(String action, String s) { Intent intent = new Intent(); intent.setAction(action); intent.putExtra("String", s); mContext.sendBroadcast(intent); } /** * 销毁广播 * * @param action */ public void unregister(String action) { if (mReceiverMap != null) { BroadcastReceiver receiver = mReceiverMap.remove(action); if (receiver != null) { mContext.unregisterReceiver(receiver); } } } }