使用java-websocket实现即时通讯/推送模块;
支持即时发消息和收消息,消息类型有开发者自定义;;
该模块需要websocket.jar的支持;开源项目地址--https://github.com/TooTallNate/Java-WebSocket
该开源项目支持客户端client和服务端server的配置使用,并提供示例test;
1,Android 客户端使用需要配置网络权限;
2,需要写一个自己的client类来继承WebsocketClient;实现websocket的状态回调和新消息的解析动作;
3,需要监控自己的client的链接状态,维持长链接;
4,发送和接收
下面贴出部分相关代码;
网络权限的不用说了吧!
client类:
常用状态回调方法有4个;
自己可以在对应的函数里面做响应的处理,比如当链接发生错误时要重新去打开该链接,收到消息时即时的保存聊天记录和发送系统通知来提醒用户查看新消息等等;
<pre name="code" class="html"><span style="font-size:18px;">public class TestClient extends WebSocketClient {
public TestClient(URI serverURI) {
super(serverURI);
}
/***
* 链接关闭
*/
@Override
public void onClose(int arg0, String arg1, boolean arg2) {
}
/***
* 链接发生错误
*/
@Override
public void onError(Exception arg0) {
}
/**
* 新消息
*/
@Override
public void onMessage(String arg0) {
}
/***
* 链接打开
*/
@Override
public void onOpen(ServerHandshake arg0) {
// TODO Auto-generated method stub
}
}
</span>
下面是我聊天部分代码,有离线消息/PC同步/多对多的聊天;
仅供参考;
/***
* <h2>WebSocket Android 客户端</h2>
* <ol>
* <li>Socket链接打开回调 {@link WebSocket#onOpen(ServerHandshake)},此处有
* {@link SocketConstant#ON_OPEN} 广播发出;
* <li>Socket链接出现异常错误时回调 {@link WebSocket#onError(Exception)},此处有
* {@link SocketConstant#ON_ERROR}广播发出;
* <li>Socket链接关闭回调 {@link WebSocket #onClose(int, String, boolean)},此处有
* {@link SocketConstant#ON_CLOSES}广播发出;
* <li>Socket链接接收消息回调 {@link WebSocket#onMessage(String)}
* ,此处做收消息的逻辑的处理;包括发送消息服务器返回的发送结果,PC端同步接收的新消息,及外来的新消息;
* <li>检测是否有消息遗漏 {@link WebSocket#checkMsgWebId(String, String)},参数为联系人和webId;
* <li>取得正在桌面运行的activity的名称 {@link WebSocket#getRunningActivityName()}
* <li>接收到的消息的处理 {@link WebSocket#messageHandle(MessageEntity, String)}
* ,参数为消息实体和消息类型 (buyer/server)
* <li>发送新消息的系统通知 {@link WebSocket#sendNotification(String)},参数为联系人;
* <li>保存离线消息 {@link WebSocket#saveOffLineMsg(HashMap)},参数为接收到的离线消息集合;
* <li>保存从服务端获取的联系人的webId {@link WebSocket#saveContactsWebID(HashMap)}
* ,参数为以联系人为key以最大webId为值得map集合;
* </ol>
*
* @author li'mingqi <a> 2014-3-19</a>
*
*/
public class WebSocket extends WebSocketClient {
// 登陆返回的back_type字段
public static final String LOGIN_RETURN_TYPE = "login";
// 发送信息的back_type字段
public static final String SEND_RETURN_TYPE = "send_result";
// 接收信息的back_type字段
public static final String RECEIVER_RETURN_TYPE = "msg";
// 接收客服的信息的back_type字段
public static final String GET_SERVER_RETURN_TYPE = "server_info";
// 接收服务端返回对应联系人的最大顺序ID
public static final String CONTACTS_MAX_WEBID_TYPE = "max_id_return";
// 接收用户的离线消息
public static final String USER_OFFLINE_MSG_TYPE = "offline";
// 上下文对象
private Context mContext;
// socket返回json解析类对象
private WebSocketParser mParser;
// 系统通知管理
public NotificationManager mNotificationManager;
// 系统通知
private Notification mNoti;
// 意图
private PendingIntent mIntent;
// 该系统通知的 id
public static final int NOTIFICATION_ID = 100;
@SuppressWarnings("deprecation")
public SGWebSocket(Context context, URI serverUri, Draft draft) {
super(serverUri, draft);
thi