轉載請註明出處:http://blog.csdn.net/yianemail/article/details/47044019java
百度雲消息推送,消息在client的處理以及消息顯示方式是基於通知欄消息提示。android
但是這明顯不是咱們想要的效果,咱們想要的是利用它實現聊天,即:在通訊聊天界面怎樣實時更新推送的消息,以不斷接受的消息實現聊天。app
一:咱們知道利用百度消息推送,要實現本身的PushMessageReceiver。 裏邊重要的是有三個方法,即:ide
public class BaiduPushReceiverextends PushMessageReceiver 函數
1, post
/**spa
* onBind :獲得綁定請求的結果.net
*/code
@Overridexml
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後臺,發送消息內容"hello"給client:
執行java後臺。發送消息內容"iam ok,are you?"給client:
這樣就完畢了即時通訊聊天界面的實現效果。