package com.openfire.service; import java.util.Calendar; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.filter.MessageTypeFilter; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import com.openfire.manager.XmppConnection; import com.partynetwork.dataprovider.util.L; import com.partynetwork.dataprovider.util.OpenfireUtil; import com.partynetwork.dataprovider.util.TimeUtil; import com.partynetwork.iparty.app.entities.IMessage; import com.partynetwork.iparty.app.manager.MessageManager; import com.partynetwork.iparty.imessage.OpenfireConstant; /** * 聊天服务 */ public class IMChatService extends Service { private Context context; private NotificationManager notificationManager; @Override public void onCreate() { context = this; super.onCreate(); initChatManager(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { super.onDestroy(); } private void initChatManager() { notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); XMPPConnection conn = XmppConnection.getInstance().getConnection(); conn.addPacketListener(pListener, new MessageTypeFilter( Message.Type.chat)); } PacketListener pListener = new PacketListener() { @Override public void processPacket(Packet arg0) { Message message = (Message) arg0; if (message != null && message.getBody() != null && !message.getBody().equals("null")) { // 消息发送时间 // String time = (String) // message.getProperty(IMessage.KEY_TIME); String time = TimeUtil.date2Str(Calendar.getInstance(), OpenfireConstant.MS_FORMART); int contentType = (Integer) message .getProperty(IMessage.CONTENT_TYPE); // 发送者 String from = message.getFrom().split("/")[0]; String to = message.getTo().split("/")[0]; // 历史记录 IMessage iMessage = new IMessage(); iMessage.setContent(message.getBody()); iMessage.setContentType(contentType); iMessage.setWithUser(OpenfireUtil.getUserNameByJid(from)); iMessage.setTime(time); iMessage.setIsCome(1); iMessage.setState(0); if (Message.Type.error == message.getType()) { iMessage.setState(-1); } MessageManager.getInstance(context).saveIMessage(iMessage); Intent intent = new Intent(OpenfireConstant.NEW_MESSAGE_ACTION); intent.putExtra(IMessage.IMMESSAGE_KEY, iMessage); sendBroadcast(intent); // setNotiType(R.drawable.icon, "收到新消息…", // notice.getContent(), // ChatActivity.class, from); } } }; /** * * 发出Notification的method. * * @param iconId * 图标 * @param contentTitle * 标题 * @param contentText * 你内容 * @param activity * @author shimiso * @update 2012-5-14 下午12:01:55 */ private void setNotiType(int iconId, String contentTitle, String contentText, Class activity, String from) { /* * 创建新的Intent,作为点击Notification留言条时, 会运行的Activity */ Intent notifyIntent = new Intent(this, activity); notifyIntent.putExtra("to", from); // notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); /* 创建PendingIntent作为设置递延运行的Activity */ PendingIntent appIntent = PendingIntent.getActivity(this, 0, notifyIntent, 0); /* 创建Notication,并设置相关参数 */ Notification myNoti = new Notification(); // 点击自动消失 myNoti.flags = Notification.FLAG_AUTO_CANCEL; /* 设置statusbar显示的icon */ myNoti.icon = iconId; /* 设置statusbar显示的文字信息 */ myNoti.tickerText = contentTitle; /* 设置notification发生时同时发出默认声音 */ myNoti.defaults = Notification.DEFAULT_SOUND; /* 设置Notification留言条的参数 */ myNoti.setLatestEventInfo(this, contentTitle, contentText, appIntent); /* 送出Notification */ notificationManager.notify(0, myNoti); } }