Android WebSocket实现即时通讯/推送

本文介绍了如何在Android中使用java-websocket库实现即时通讯功能。内容包括配置网络权限,创建继承自WebSocketClient的自定义client类,处理状态回调和消息解析,以及维护长链接的策略。此外,还分享了部分关键代码片段,帮助读者理解和实现WebSocket在Android上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值