转载请注明出处:http://blog.csdn.net/yianemail/article/details/47044019
百度云消息推送,消息在客户端的处理以及消息显示方式是基于通知栏消息提示。
但是这明显不是我们想要的效果,我们想要的是利用它实现聊天,即:在通信聊天界面如何实时更新推送的消息,以不断接受的消息实现聊天。
一:我们知道利用百度消息推送,要实现自己的PushMessageReceiver。 里边重要的是有三个方法,即:
public class BaiduPushReceiverextends PushMessageReceiver
1,
/**
* onBind :得到绑定请求的结果
*/
@Override
publicvoid onBind(Context context,int errorCode, String appid,
String userId, String channelId, String requestId) {}
2,
/**
* onMessage :接受透传消息
*/
@Override
publicvoid onMessage(Context context, String message,
String customContentString) {}
3,
/**
* onNotificationArrived:消息在客户端以通知形式
*/
@Override
publicvoidonNotificationArrived(Context context, String title,
String description, String customContentString) {}
onBind:在该函数中可以得到绑定结果,即可以拿到userId以及channelId(Java后台也是基于这两个信息实现自己推送)
onMessage:在该函数是处理透传消息,何为透传,就是说你可以直接在该应用运行时接受消息,而不是以标题栏通知的形式显示。这也是我们实现的重点
onNotificationArrived:推送消息以通知的形式。
二:聊天界面是一个ListView,我们要做的就是在消息透传onMessage函数里边,判断当前应用是否正在启动,如果正在启动,就直接把接受到的消息更 新在聊天界面。(如果判断没有启动,再以标题栏通知的形式进行通知。)
判断应用是否正在启动:
public static boolean isRunningApp(Context context, String packageName) { boolean isAppRunning = false; ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for (RunningTaskInfo info : am.getRunningTasks(100)) { if (info.topActivity.getPackageName().equals(packageName) && info.baseActivity.getPackageName().equals(packageName)) { isAppRunning = true; break; } } return isAppRunning; }
每次收到消息后及时在聊天界面实现更新,这重要的一点,假如我们要跳转界面是MainActivity,则在mainfest.xml把MainActivity 启动模式设置为:
android:launchMode="singleTask"
跳转界面: 然后在聊天界面中的onResume函数进行聊天界面更新处理
public void JumpActivity(Context context, String Msg) { Comment.Msg = Msg; Intent intent = new Intent(); intent.setClass(context.getApplicationContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.getApplicationContext().startActivity(intent); }
四:效果
运行java后台,发送消息内容"hello"给客户端:
运行java后台,发送消息内容"iam ok,are you?"给客户端:
这样就完成了即时通信聊天界面的实现效果。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/yianemail/article/details/47044019