package com.avoscloud.beijing.push.demo.keepalive; import java.util.HashMap; import java.util.List; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.BitmapFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.avos.avoscloud.AVGroupMessageReceiver; import com.avos.avoscloud.AVMessage; import com.avos.avoscloud.Group; import com.avos.avoscloud.LogUtil; import com.avos.avoscloud.Session; import com.avos.avospush.notification.NotificationCompat; import com.avoscloud.beijing.push.demo.keepalive.data.ChatDemoMessage; public class ChatDemoGroupMessageReceiver extends AVGroupMessageReceiver { @Override public void onJoined(Context context, Group group) { LogUtil.avlog.d(group.getGroupId() + " Joined"); Intent i = new Intent(context, GroupChatActivity.class); i.putExtra(GroupChatActivity.DATA_EXTRA_SINGLE_DIALOG_TARGET, group.getGroupId()); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); context.startActivity(i); } @Override public void onInvited(Context context, Group group, String byPeerId) { LogUtil.avlog.d("you're invited to " + group.getGroupId() + " by " + byPeerId); } @Override public void onKicked(Context context, Group group, String byPeerId) { LogUtil.avlog.d("you're kicked from " + group.getGroupId() + " by " + byPeerId); } @Override public void onMessageSent(Context context, Group group, AVMessage message) { LogUtil.avlog.d(message.getMessage() + " sent"); } @Override public void onMessageFailure(Context context, Group group, AVMessage message) { LogUtil.avlog.d(message.getMessage() + " failure"); } @Override public void onMessage(Context context, Group group, AVMessage msg) { JSONObject j = JSONObject.parseObject(msg.getMessage()); ChatDemoMessage message = new ChatDemoMessage(); MessageListener listener = groupMessageDispatchers.get(group.getGroupId()); /* * 这里是demo中自定义的数据格式,在你自己的实现中,可以完全自由的通过json来定义属于你自己的消息格式 * * 用户发送的消息 {"msg":"这是一个消息","dn":"这是消息来源者的名字"} * * 用户的状态消息 {"st":"用户触发的状态信息","dn":"这是消息来源者的名字"} */ if (j.containsKey("content")) { message.fromAVMessage(msg); // 如果Activity在屏幕上不是active的时候就选择发送 通知 if (listener == null) { LogUtil.avlog.d("Activity inactive, about to send notification."); NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); String ctnt = message.getMessageFrom() + ":" + message.getMessageContent(); Intent resultIntent = new Intent(context, GroupChatActivity.class); resultIntent .putExtra(GroupChatActivity.DATA_EXTRA_SINGLE_DIALOG_TARGET, group.getGroupId()); resultIntent.putExtra(Session.AV_SESSION_INTENT_DATA_KEY, JSON.toJSONString(message)); resultIntent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); PendingIntent pi = PendingIntent.getActivity(context, -1, resultIntent, PendingIntent.FLAG_ONE_SHOT); Notification notification = new NotificationCompat.Builder(context) .setContentTitle(context.getString(R.string.notif_group)) .setContentText(ctnt) .setContentIntent(pi) .setSmallIcon(R.drawable.ic_launcher) .setLargeIcon( BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher)) .setAutoCancel(true).build(); nm.notify(233, notification); LogUtil.avlog.d("notification sent"); } else { listener.onMessage(JSON.toJSONString(message)); } } LogUtil.avlog.d(message + " receiver"); } @Override public void onQuit(Context context, Group group) { LogUtil.avlog.d(group.getGroupId() + " quit"); } @Override public void onReject(Context context, Group group, String op, List<String> targetIds) { LogUtil.avlog.d(op + ":" + targetIds + " rejected"); } @Override public void onMemberJoin(Context context, Group group, List<String> joinedPeerIds) { LogUtil.avlog.d(joinedPeerIds + " join " + group.getGroupId()); } @Override public void onMemberLeft(Context context, Group group, List<String> leftPeerIds) { LogUtil.avlog.d(leftPeerIds + " left " + group.getGroupId()); } @Override public void onError(Context context, Group group, Throwable e) { LogUtil.log.e("", (Exception) e); } public static void registerGroupListener(String groupId, MessageListener listener) { groupMessageDispatchers.put(groupId, listener); } public static void unregisterGroupListener(String groupId) { groupMessageDispatchers.remove(groupId); } static HashMap<String, MessageListener> groupMessageDispatchers = new HashMap<String, MessageListener>(); }