百度云消息推送机制在即时通信聊天界面的信息处理,技巧篇。


       转载请注明出处http://blog.csdn.net/yianemail/article/details/47044019

      百度云消息推送,消息在client的处理以及消息显示方式是基于通知栏消息提示。

     可是这明显不是我们想要的效果,我们想要的是利用它实现聊天,即:在通信聊天界面怎样实时更新推送的消息,以不断接受的消息实现聊天。

   一:我们知道利用百度消息推送,要实现自己的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:消息在client以通知形式

    */

     @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后台推送消息内容至固定client(依照文档。加入对应jar):

 

  

  四:效果

   执行java后台,发送消息内容"hello"给client:

    

  

     执行java后台。发送消息内容"iam ok,are you?"给client:

    

   

    这样就完毕了即时通信聊天界面的实现效果。

posted @ 2017-08-09 14:49  jhcelue  阅读(927)  评论(1编辑  收藏  举报