美文网首页
推送显示未读消息数量

推送显示未读消息数量

作者: Liu积土成山 | 来源:发表于2020-01-17 22:10 被阅读0次

    在实际开发中会有这样还一个需求,显示推送过来的未读消息数量
    推送实时更新未读消息数量,接收到【一条消息】,就【显示未读数量】,当用户点击,或者拖拽的时候消除掉未读消息数量,先上一下效果图,当我推送两条消息过来的时候显示的样子


    image.png

    用到的技术 EventBus 响应式框架:以及显示消息的QBadgeView负责来显示

    目的:
    1.把接收到的消息从Receiver发送到主Activity,在主Activity中接收这个数量
    2.把接收到的数量用QBadgeView来显示 badgerView更多用法请参考 https://github.com/qstumn/BadgeView

    第一步

    先引入我们的QBadgeView 库和EventBus库在我们的app->build.gradle中添加

    implementation 'q.rorbin:badgeview:1.1.3'
    implementation 'org.greenrobot:eventbus:3.0.0'
    

    第二步

    在我们接收自定义消息的地方添加

    public class MyReceiver extends BroadcastReceiver {
        private static final String TAG = "JPush";
        @Override
        public void onReceive(Context context, Intent intent) {
            //当接受到消息, 弹出通知栏
            Bundle bundle = intent.getExtras();
            // 消息内容
            String content = bundle.getString(JPushInterface.EXTRA_ALERT);
           if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
                processCustomMessage(context, bundle);
           }
        }
    }
        // 这里当我们APP端接收到推送过来的消息,我们就递增,并存起来        
        private void processCustomMessage(Context context, Bundle bundle) {
            sendNotification(context,bundle);
            String msgText = bundle.getString(JPushInterface.EXTRA_MESSAGE);
            // 初始化一个存取未读消息的,默认存储是0
            int pushcount = SharePreferenceUtils.getInt(context,"pushcount",0);
            pushcount++;
            // 当收到消息的时候在存
            SharePreferenceUtils.setInt(context,"pushcount",pushcount);
            getMsgCount(context);
        }
    
        // 拿到我们存的消息
        private int getSendMessage(Context context) {
            return SharePreferenceUtils.getInt(context,"pushcount",0);
        }
    
        // 发送我们的消息给MainActivity
        private void getMsgCount(Context context) {
            int msg = getSendMessage(context);
            MessageEventBean messageEvent = new MessageEventBean(msg);
            EventBus.getDefault().post(messageEvent);
        }
    

    接下来看看我们的MainActivity

    public class MainActivity extends AppCompatActivity{
        @InjectView(R.id.swicth_draggable)
        Switch swicth_draggable; 
        private int msgCount;   // 接收消息数量
        private QBadgeView badgeView;
        private List<Badge> badges;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.inject(this);
            init();
        }
        // 初始化 注意看我的顺序,badges 要放在后面
         private void init() {
            EventBus.getDefault().register(this);
            CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    for (Badge badge : badges) {
                        badge.setOnDragStateChangedListener(isChecked ?
                                new Badge.OnDragStateChangedListener() {
                                    @Override
                                    public void onDragStateChanged(int dragState, Badge badge, View targetView) {
                                        SharePreferenceUtils.remove(MainActivity.this,"pushcount");
                                    }
                                } : null);
                    }
                }
            };
            swicth_draggable.setOnCheckedChangeListener(onCheckedChangeListener);
            badges = new ArrayList<>();
            badgeView = new QBadgeView(this);
            // 拿到我们存的数据
            msgCount = SharePreferenceUtils.getInt(MainActivity.this,"pushcount",0);
            // 这里我们把显示未读数量提取出来放到一个方法里,这里是我们用户一进来主页面显示的未读消息数量
            getBrageCountMsg(msgCount); 
        }
        // 未读数量
        private void getBrageCountMsg(int msgCount) {
            badgeView.setBadgeNumber(msgCount);
            badgeView.bindTarget(mTabtab4);
            badges.add(badgeView);
            swicth_draggable.setChecked(true);
        }
        
        @Subscribe(threadMode = ThreadMode.MAIN)
        public void onMsgEvent(MessageEventBean messageEventBean){
            msgCount = messageEventBean.getMessage();
            SharePreferenceUtils.setInt(MainActivity.this,"pushcount",msgCount);
            // 这里是我们推送数据过来实时显示的未读消息数量
            getBrageCountMsg(msgCount);
        }
        // 在我点击了位置服务的时候删除未读消息[在你想删除的地方调用该方法即可]
        private void removeBadge() {
            for (Badge badge : badges) {
                SharePreferenceUtils.remove(MainActivity.this,"pushcount");
                badge.hide(true);
            }
        }
        // 别忘了解除绑定
        @Override
        protected void onDestroy() {
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:推送显示未读消息数量

          本文链接:https://www.haomeiwen.com/subject/hwuhzctx.html