67MainActivity接收新消息的提醒

来源:互联网 发布:网络语皮是什么意思 编辑:程序博客网 时间:2024/05/22 06:56

实现后的效果:


这个广播接收者主要用来在底部菜单上面显示未读的消息数目。

/** *  * 新消息广播接收者 *  * @author * */private class NewMessageBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 主页面收到消息后,主要为了提示未读,实际消息内容需要到chat页面查看// msgid和from是从环信的jar中传过来的String from = intent.getStringExtra("from");// 消息idString msgId = intent.getStringExtra("msgid");EMMessage message = EMChatManager.getInstance().getMessage(msgId);// ========================================================================================Log.i(TAG, "msgid:" + msgId);Log.i(TAG, "from:" + from);Log.i(TAG, " message.getFrom():" + message.getFrom());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");Log.i(TAG," message.getMsgTime():" + sdf.format(message.getMsgTime()));Log.i(TAG, "message.getTo():" + message.getTo());/* * Log.i(TAG, "ChatActivity.activityInstance.getToChatUsername()):" * + ChatActivity.activityInstance.getToChatUsername()); *  * Log.i(TAG, "ChatActivity.activityInstance.getToChatUsername()):" * + ChatActivity.activityInstance.getToChatUsername()); */// =======================================================================// BUG修复 在聊天页面对方发送消息过来时不立即显示内容的BUGif (ChatActivity.activityInstance != null) {if (message.getChatType() == ChatType.GroupChat) {if (message.getTo().equals(ChatActivity.activityInstance.getToChatUsername())) {return;}} else {if (from.equals(ChatActivity.activityInstance.getToChatUsername())) {return;}}}// 注销广播接收者,否则在ChatActivity中会收到这个广播// onReceive()方法中调用abortBroadcast,表示将这个广播截断,后面的广播接受者无法再接收这个消息abortBroadcast();notifyNewMessage(message);updateUnreadLabel();// 下面的代码有点小问题// 当前页面如果为聊天历史页面,刷新此页面if (chatHistoryFragment != null) {chatHistoryFragment.refresh();}}}

创建一个内部类继承自:BroadcastReceiver,内部类实现的广播接收者不需要在清单文件中配置。首先从SDK获取消息来自哪里(from)和消息的id(msgid)。根据msgid得到EMMessage的实例message,这个message可以获取发送时间等等的信息。然后调用abortBroadcast方法,这样后面的广播接收者就不会再收到这个广播了。

通过代码注册:

msgReceiver = new NewMessageBroadcastReceiver();IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());intentFilter.setPriority(3);registerReceiver(msgReceiver, intentFilter);

必须先调用:

EMChat.getInstance().setAppInited();



0 0