67MainActivity接收新消息的提醒

实现后的效果:


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

/**
	 * 
	 * 新消息广播接收者
	 * 
	 * @author
	 *
	 */
	private class NewMessageBroadcastReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {

			// 主页面收到消息后,主要为了提示未读,实际消息内容需要到chat页面查看

			// msgid和from是从环信的jar中传过来的

			String from = intent.getStringExtra("from");

			// 消息id
			String 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修复 在聊天页面对方发送消息过来时不立即显示内容的BUG

			if (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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值