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);
}
}