即时聊天APP(六) - 消息的接收以及EventBus使用
通常我们在接收消息的时候会有声音和震动的提示,因此我也加了代码达到这样的效果,这就要用到EventBus了,当然这里我也用到了自定义的广播,所以首先在Mainfests文件中加入以下代码:
<receiver
android:name=".MylocalMessage"
android:process=":bmobpush" >
<intent-filter>
<!-- 接收自定义广播的action -->
<action android:name="cn.edu.sau.action.MESSAGE" />
</intent-filter>
</receiver>
然后再写一个MessageEvent的Bean类对事件进行封装(这里只用到一个String类型的变量):
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
接下来我们在ImMessageHandler中接收到消息,并调用EventBus的post方法发送事件:
public class ImMessageHandler extends BmobIMMessageHandler{
/**
* 接收在线消息
* @param messageEvent
*/
@Override
public void onMessageReceive(MessageEvent messageEvent) {
super.onMessageReceive(messageEvent);
final Msg msg = new Msg(messageEvent.getMessage().getContent(), Msg.TYPE_RECEIVED);
msg.setSender(MyUser.getUni());
msg.setReceiver(messageEvent.getFromUserInfo().getUserId());
int len = msg.getContent().length();
// 过滤字符串
String str="=[cn.bmob.newim.event.Message Event@";
String str1="=[cn.bmob.newim.event.MessageEvent@";
String str2 = msg.getContent().trim();
int bl = str2.indexOf(str);
int bo = str2.indexOf(str1);
if(bl!=-1 || bo!=-1){
}else{
if(!msg.getReceiver().equals(Tips.Receiver))
if(len > 10){
String show = msg.getContent().substring(0,8);
//使用EventBus发送通知,主Activity中处理事件
EventBus.getDefault().post(new cn.edu.sau.joker.MessageEvent(msg.getReceiver()+":"+show+"......"));
}else {
EventBus.getDefault().post(new cn.edu.sau.joker.MessageEvent(msg.getReceiver()+":"+msg.getContent()));
}
//聊天界面添加消息
Main.add(msg);
}
}
/**
* 接收离线消息,本程序不做处理
* @param offlineMessageEvent
*/
@Override
public void onOfflineReceive(OfflineMessageEvent offlineMessageEvent) {
super.onOfflineReceive(offlineMessageEvent);
}
}
之前我在MainActivity中写了onMessageEvent方法(方法名字随便写,但是在方法前面要加@Subscribe注解,并且指定线程模型),用来接收事件并进行处理(发送广播):
//发送广播
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(cn.edu.sau.joker.MessageEvent event) {
Intent intent = new Intent("cn.edu.sau.action.MESSAGE");
intent.putExtra("msg",event.message);
sendBroadcast(intent);
}
然后我们在MylocalMessage(为什么我要起这么个类名,请参考Mainfests中的代码)中接收广播,并发送一个通知,指定铃声和震动事件:
public class MylocalMessage extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 收到广播时,发送一个通知
String content = intent.getStringExtra("msg");
NotificationManager manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
Notification notify = new Notification.Builder(context)
.setSmallIcon(R.drawable.icon)
.setContentTitle("您收到一条消息")
.setContentText(content)
.build();
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
notify.sound = uri;
long[] vibrates = { 0, 200, 200, 200 };
notify.vibrate = vibrates;
manager.notify(1, notify);
}
}
整个项目大致就是这样,欢迎大家的评论和指正(虽然我也听不进去),最后放源码和APK .##
即时聊天APP(六) - 消息的接收以及EventBus使用的更多相关文章
- Openfire 单人聊天和多人聊天(发送消息、接收消息)
Openfire 单人聊天和多人聊天(发送消息.接收消息) 一.单人聊天 1)发送消息: 首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFrie ...
- 即时聊天APP(一)
最新写了一个即时聊天的安卓Demo,是基于Bmob后端开发的app,由于Bmob有较大局限性,因此,我并没有按照开发文档来进行开发,只是简单写了一个基本的文字聊天,以后有时间我会自己写一个带服务端的即 ...
- 即时聊天APP(五) - 聊天界面
设置界面没什么好说的,无非也就是加了个对话框来二次提醒用户,现在来讲讲聊天界面. 聊天界面初始化时会得到一个参数,就是对方的id,并设置在标题栏的位置,此界面也是使用RecyclerView来展示聊天 ...
- openfire Android 学习(四)----单人聊天和多人聊天(发送消息、接收消息)
一.单人聊天 1)发送消息: 首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFriendChat()获取 [java] view plainco ...
- 即时聊天APP(四) - 联系人和会话
联系人和会话界面使用的是RecyclerView进行滑动显示,并将好友列表存储至数据库,以供下次登录时使用,RecyclerView在后面我会详细介绍,这里略过. 联系人初始化时读取数据库并展示: / ...
- 即时聊天APP(三) - 注册和登陆
注册和登陆大多都是一些用户名和密码的验证,所以放在一起写,注册代码: String account = accountEdit.getText().toString().trim(); String ...
- 即时聊天APP(二) - MainActivity
主活动包含三个Fragment,分别是会话.联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来: //隐藏所有Fragment private void hideAll(){ Fragmen ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 用过企业微信APP 后,微信接收不到消息,解决方案
用过企业微信APP 后,微信接收不到消息的,怎么办? 请打开企业微信,找到:我----设置----新消息通知----仅在企业微信中接收消息
随机推荐
- DFS-深度优先算法解决迷宫问题
/*main.cpp*/#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int sr, sc ...
- python+unittest框架第二天unittest之简单认识Test Suite:测试套件
今天了解下测试套件Test Suite,什么是测试套件,测试套件是由多个Test Case测试用例组成的,当然也可以由多个子测试套件组成. 接下来看下如果构建测试套件,构建测试套件的方法: 1.用un ...
- 在centos6系列vps装Tomcat8.0
In the following tutorial you will learn how to install and set-up Apache Tomcat 8 on your CentOS 6 ...
- ubuntu16.04双系统创建分区
ubuntu安装分区 安装ubuntu 图1:Ubuntu Linux分区向导 如果希望对分区过程进行完全控制,可以使用"其它"选项.单击"继续"按钮,安装向导 ...
- 使用.Net Core CLI命令dotnet new创建自定义模板
文章起源来自一篇博客:使用 .NET CORE 创建 项目模板,模板项目,Template - DeepThought - 博客园 之前使用Abp的时候就很认同Abp创建模板项目的方式.想不到.Net ...
- Java网络编程与NIO详解4:浅析NIO包中的Buffer、Channel 和 Selector
微信公众号[黄小斜]作者是蚂蚁金服 JAVA 工程师,目前在蚂蚁财富负责后端开发工作,专注于 JAVA 后端技术栈,同时也懂点投资理财,坚持学习和写作,用大厂程序员的视角解读技术与互联网,我的世界里不 ...
- 线程的start方法解析
Thread是学习我们学习多线程接触到的第一个有关多线程的类,相信每一个学习过或者了解过Java多线程的小伙伴都知道Thread类.这次分享主要对Thread的start方法进行讲解. 相信大家都知道 ...
- Pycharm2019.2.1永久激活
Pycharm2019.2.1永久激活 Pycharm官网自7月24更新到pycharm2019.2版本后,在短短的一个月内与8月23又带来新版本2019.2.1,不可说更新不快,对于"喜新 ...
- 如何使用人工智能保护API的安全
数字转型是基于一种可驱动新的操作模型的API,提供对业务逻辑.应用程序和数据的直接访问.虽然这种访问对于员工,合作伙伴和客户来说非常方便,但它也使API成为黑客和恶意网络的攻击目标.随着越来越多的攻击 ...
- 借助腾讯云的云函数实现一个极简的API网关
借助腾讯云的云函数实现一个极简的API网关 Intro 微信小程序的域名需要备案,但是没有大陆的服务器,而且觉得备案有些繁琐,起初做的小程序都有点想要放弃了,后来了解到腾讯云的云函数,于是利用腾讯云的 ...