package com.kaixin.android.service; import java.util.Timer; import java.util.TimerTask; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.util.Log; import android.view.View; import com.easemob.chat.EMChat; import com.easemob.chat.EMChatManager; import com.easemob.chat.EMChatOptions; import com.easemob.chat.EMMessage; import com.easemob.chat.OnMessageNotifyListener; import com.easemob.chat.OnNotificationClickListener; import com.easemob.exceptions.EaseMobException; import com.kaixin.android.R; import com.kaixin.android.activity.ChatActivity; import com.kaixin.android.activity.MainActivity; import com.kaixin.android.db.SaveConversationDao; import com.kaixin.android.menu.Home; import com.kaixin.android.result.ConversationResult; import com.kaixin.android.utils.AppShortCutUtil; import com.kaixin.android.utils.StorageUtil; import com.kaixin.android.utils.StringUtil; public class MessagePushService extends Service { private Notification mNotification = null; private NotificationManager mNotifyManager = null; private Intent mIntent = null; private PendingIntent mPendingIntent = null; private int messageNotificationID = 100; private NewMessageBroadcastReceiver msgReceiver; private Timer timer; @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); EMChat.getInstance().setDebugMode(false); EMChat.getInstance().init(this); // AppClassInfoFactory.init(new AppConfig()); msgReceiver = new NewMessageBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(EMChatManager .getInstance().getNewMessageBroadcastAction()); intentFilter.setPriority(3); registerReceiver(msgReceiver, intentFilter); mNotification = new Notification(R.drawable.icon, "聊天消息", System.currentTimeMillis()); mNotification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE; mNotification.flags = Notification.FLAG_AUTO_CANCEL; mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); long[] vibrate = { 0, 100, 200, 300 }; mNotification.vibrate = vibrate; // 获取到配置options对象 EMChatOptions options = EMChatManager.getInstance().getChatOptions(); options.setNotificationEnable(true); // 设置自定义的文字提示 options.setNotifyText(new OnMessageNotifyListener() { @Override public String onNewMessageNotify(EMMessage message) { // 可以根据message的类型提示不同文字,这里为一个简单的示例 try { return "你的好基友" + message.getStringAttribute("mName") + "发来了一条消息"; } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; } @Override public String onLatestMessageNotify(EMMessage message, int fromUsersNum, int messageNum) { return fromUsersNum + "个基友,发来了" + messageNum + "条消息"; } }); options.setOnNotificationClickListener(new OnNotificationClickListener() { @Override public Intent onNotificationClick(EMMessage message) { Intent intent = new Intent(MessagePushService.this, ChatActivity.class); intent.putExtra("email", message.getFrom()); StorageUtil.saveString(getApplicationContext(), "hasUnreadMsg", "true"); try { SaveConversationDao.getInstance(getApplicationContext()) .saveConversation( new ConversationResult(message .getStringAttribute("mName"), message .getFrom(), message .getStringAttribute("mAvatar"))); intent.putExtra("name", message.getStringAttribute("mName")); intent.putExtra("avatar", message.getStringAttribute("mAvatar")); } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } /*intent.putExtra("isNews", "yes"); intent.putExtra("isNews", message.getMsgId());*/ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (msgReceiver != null) { try { unregisterReceiver(msgReceiver); } catch (Exception e) { e.printStackTrace(); } } return intent; } }); // timer = new Timer(); // timer.schedule(new RemindTask(), 1* 1000, 4 * 1000); //app初始化完毕 EMChat.getInstance().setAppInited(); } class RemindTask extends TimerTask { public void run() { System.out.println("Time is running!!"); } } private class NewMessageBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 消息id String msgId = intent.getStringExtra("msgid"); // 发消息的人的username(userid) String msgFrom = intent.getStringExtra("from"); // 消息类型,文本,图片,语音消息等,这里返回的值为msg.type.ordinal()。 // 所以消息type实际为是enum类型 int msgType = intent.getIntExtra("type", 0); // 消息body,为一个json字符串 String msgBody = intent.getStringExtra("body"); Log.d("main", "new message id:" + msgId + " from:" + msgFrom + " type:" + msgType + " body:" + msgBody); // 更方便的方法是通过msgId直接获取整个message EMMessage message = EMChatManager.getInstance().getMessage(msgId); initNotiIntent(message); StorageUtil.saveString(getApplicationContext(), "hasUnreadMsg", "true"); if(!StringUtil.isNull(StorageUtil.getString(MessagePushService.this, "hasUnreadMsg"))){ Home.mMsgNumber.setVisibility(View.VISIBLE); }else{ Home.mMsgNumber.setVisibility(View.GONE); } try { SaveConversationDao.getInstance(getApplicationContext()) .saveConversation( new ConversationResult(message .getStringAttribute("mName"), message .getFrom(), message .getStringAttribute("mAvatar"))); mNotification.setLatestEventInfo(MessagePushService.this, "聊天消息", "你的好基友" + message.getStringAttribute("mName") + "发来了一条消息", mPendingIntent); } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } mNotifyManager.notify(messageNotificationID, mNotification); messageNotificationID = messageNotificationID + 1; /*intent = new Intent(KXApplication.this, ChatActivity.class); intent.putExtra("email", message.getFrom() + "@189.com"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); KXApplication.this.startActivity(intent);*/ } } @Override public void onDestroy() { if (msgReceiver != null) { try { unregisterReceiver(msgReceiver); } catch (Exception e) { e.printStackTrace(); } } super.onDestroy(); } public void initNotiIntent(EMMessage message) { // 推送 mIntent = new Intent(this, ChatActivity.class); mIntent.putExtra("email", message.getFrom()); mIntent.putExtra("isNews", "yes"); try { mIntent.putExtra("name", message.getStringAttribute("mName")); mIntent.putExtra("avatar", message.getStringAttribute("mAvatar")); } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); mPendingIntent = PendingIntent.getActivity(this, messageNotificationID, mIntent, PendingIntent.FLAG_UPDATE_CURRENT); } }