android 动态注册广播

2019-06-27  本文已影响0人  一个冬季
需求

如果用户登录了,需要注册了广播的部分页面重新刷新数据,同样注册了相同广播的可以不用刷新页面

代码实现
/**
* @date: 2019/4/28 0028
* @author: gaoxiaoxiong
* @description:广播接收器
**/
public class LocalBroadcastReceiver extends BroadcastReceiver {
    private OnClassNameListener onClassNameListener;
    public interface OnClassNameListener{
       void className(String name,Intent intent);//className
    }

    public void setOnClassNameListener(OnClassNameListener onClassNameListener) {
        this.onClassNameListener = onClassNameListener;
    }

    public static String BROADCASTNAME="className";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (onClassNameListener!=null){
            String className = intent.getStringExtra(BROADCASTNAME);
           if(className !=null)
              onClassNameListener.className(className,intent);
        }
          //当然了,用户可以根据设置的actionName来操作
         if (intent.getAction().equals(SPMobileConstants.RELOADACTION)){
   
         }
    }
}

用户可以通过这个className决定是否刷新数据

发送广播

  public static String RELOADACTION="com.xxxxx.reloadAction";//重新加载
  Intent messageIntent = new Intent(RELOADACTION);
  messageIntent.putExtra(BROADCASTNAME,"MainTwoFragment");
  LocalBroadcastManager.getInstance(mActivity).sendBroadcast(messageIntent);

广播监听

        LocalBroadcastReceiver localBroadcastReceiver;
       //注册广播监听,用户可以根据判断传递的name是不是自己需要的对应的名字就决定是否去刷新页面
        if (localBroadcastReceiver == null){
            localBroadcastReceiver = new LocalBroadcastReceiver();
            localBroadcastReceiver.setOnClassNameListener(new LocalBroadcastReceiver.OnClassNameListener() {
                @Override
                public void className(String name, Intent intent) {
                    if (!StringUtils.isEmpty(name) && name.equals("MainTwoFragment")){
                     //做一些MainTwoFragment的操作
                    }

                }
            });
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(RELOADACTION);
            LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(localBroadcastReceiver,intentFilter);
        }
        //一定要记得销毁,解绑
     @Override
    public void onDestroyView() {
        super.onDestroyView();
        if (localBroadcastReceiver!=null){
            LocalBroadcastManager.getInstance(this.getActivity()).unregisterReceiver(localBroadcastReceiver);
            localBroadcastReceiver = null;
        }
    }
上一篇下一篇

猜你喜欢

热点阅读