通常我们在接收消息的时候会有声音和震动的提示,因此我也加了代码达到这样的效果,这就要用到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 .##

最新文章

  1. [Network] HTML、XML和JSON学习汇总
  2. rpm与yum
  3. 关于ellipsis多行换行的方案
  4. C++回调函数的应用&lt;转自:http://blog.csdn.net/wubin1124/article/details/4386269&gt;
  5. POJ1276Cash Machine[多重背包可行性]
  6. UVa10806 Dijkstra,Dijkstra-费用网络流
  7. 我的工具箱之VNC
  8. Oracle笔记 九、PL/SQL 游标的使用
  9. C++:类模板与模板类
  10. Android设备上i-jetty环境的搭建-手机上的web服务器
  11. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]
  12. 【LeetCode练习题】Valid Palindrome
  13. Java面向对象面试案例
  14. ThinkPHP第六天(正则表达式)
  15. 集成ejs和angular
  16. jsmart 前结合案例
  17. [LOJ2310][APIO2017]斑斓之地——可持久化线段树
  18. git库初次下载
  19. python-工厂方法模式
  20. 利用EF和C#泛型实现通用分页查询

热门文章

  1. Python装饰器完全解读
  2. Json对象转Ts类
  3. 小白学Python(1)——安装与调试,“你好,世界”,“hello,world”
  4. Springboot源码分析之EnableAspectJAutoProxy
  5. Jmeter 02 Jmeter断言之响应断言
  6. Web前端和Web后端的区分
  7. Codeforces 337D
  8. SDU暑期集训排位(4)
  9. Python学习之旅:使用Python实现Linux中的ls命令
  10. 性能测试:通过设置注册表提高 P2P/IIS 并发数