本文借鉴于https://blog.csdn.net/u013872857/article/details/79190643感谢大神的贡献

借鉴文章所用websocket 第三方是:nv-websocket-client:2.2,

而这里所用的是:Java-WebSocket:1.3.0

核心代码如下:

public abstract class MyWebSocketService extends Service implements IWebSocket {

    private static final String TAG = MyWebSocketService.class.getSimpleName();
private ServiceBinder binder = new ServiceBinder(); private int connectStatus = 0; private WebSocketThread webSocketThread;
private WebSocketClient client; @Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind: ");
if (binder == null){
binder = new MyWebSocketService.ServiceBinder();
}
return binder;
}
public class ServiceBinder extends Binder {
public MyWebSocketService getService() {
return MyWebSocketService.this;
}
} @Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreate: ");
// 连接
webSocketThread = new MyWebSocketService.WebSocketThread();
webSocketThread.start(); }
private class WebSocketThread extends Thread {
@Override
public void run() {
Log.i(TAG, "run: ");
setupWebSocket();
}
} protected void setupWebSocket(){
Log.i(TAG, "setupWebSocket: ");
if (connectStatus != 0) return;
connectStatus = 1;
try {
client = new WebSocketClient(URI.create(getConnectUrl()), new Draft_10()) {
@Override
public void onOpen(ServerHandshake handshakedata) {
connectStatus = 2;
} @Override
public void onMessage(String message) {
Log.i(TAG, "onMessage: " + message);
// 消息分发
dispatchResponse(message);
} @Override
public void onClose(int code, String reason, boolean remote) {
Log.e(TAG, "onClose: " + code + reason);
connectStatus = 0;
// EventBus 通知 } @Override
public void onError(Exception ex) {
Log.e(TAG, "onError: " + ex.getMessage());
connectStatus = 0;
// EventBus 通知
} };
client.connect();
}catch (Exception e){
e.printStackTrace();
} } @Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: ");
} @Override
public void sendText(String text) {
Log.i(TAG, "sendText From Four Activity : " + text);
if (TextUtils.isEmpty(text)) return;
if (client != null && connectStatus == 2){
client.send(text);
}
} @Override
public int getConnectStatus() {
return connectStatus;
} @Override
public void reconnect() {
Log.i(TAG, "reconnect: ");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (webSocketThread != null && webSocketThread.isAlive()){
connectStatus = 0;
webSocketThread = new WebSocketThread();
webSocketThread.start();
}else {
Log.e(TAG, "run: reconnect action is Failed " );
}
}
}).start();
} @Override
public void stop() {
Log.i(TAG, "stop: ");
client.close();
connectStatus = 0;
} /**
* 获取服务器地址
* @return
*/
protected abstract String getConnectUrl(); /**
* 分发响应数据
*/
protected abstract void dispatchResponse(String textResponse); }

同借鉴文章中 AbsBaseWebSocketService.java 文件

其主要功能是:

实现websocket 连接过程中几个行为:IWebSocket,

提供具体的服务绑定,

开启websocket 连接线程,回调消息处理等

其他代码不多加赘述,请先看借鉴文章,之后便对此一目了然,如有不懂,可在下方评论区留言,

谢谢!

安卓websocket 封装基于Java-websocket的更多相关文章

  1. 基于Java的WebSocket推送

    WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...

  2. 基于java webRct webSocket 实现点对点视频 (需要源码的请加支付宝好友)

    打开支付宝首页搜“555176706”领红包,即可加好友 <%@ page language="java" pageEncoding="UTF-8"%&g ...

  3. 基于Java API for WebSocket (JSR-356)的标准websocket客户端

    maven依赖 springboot <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  4. Java WebSocket实现网络聊天室(群聊+私聊)

    1.简单说明 在网上看到一份比较nice的基于webSocket网页聊天项目,准备看看学习学习,如是有了这篇文章!原博主博客:http://blog.csdn.net/Amayadream/artic ...

  5. java websocket学习

    引言: websocket,webservice傻傻分不清楚,都觉得是很高深的东西,理解中的webservice是一种协议,通信协议,类似http协议的那种,比如使用webservice协议调后台接口 ...

  6. Java WebSocket 线程安全的保证

    Java WebSocket线程安全基于3点: 1 在新的客户端连接时,WebSocket容器会创建一个新的端点实例,对应的会话实例表示从唯一的客户端到该端点实例的唯一连接. 2 每个WebSocke ...

  7. JAVA WebSocKet ( 实现简单的前后端即时通信 )

    1, 前端代码 HTML5 部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...

  8. SpringBoot集成WebSocket【基于纯H5】进行点对点[一对一]和广播[一对多]实时推送

    代码全部复制,仅供自己学习用 1.环境搭建 因为在上一篇基于STOMP协议实现的WebSocket里已经有大概介绍过Web的基本情况了,所以在这篇就不多说了,我们直接进入正题吧,在SpringBoot ...

  9. java websocket 简单使用【案例】

    现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器.这种 ...

随机推荐

  1. 如何为Windows XP / Windows7-32bit / Windows7-64bit安装capicom.dll

    原文: http://164.100.181.16/ssdgsap/RegisterDLL.htm 1.根据操作系统的要求下载相应的文件夹安装capicom.dll for Windows XP的步骤 ...

  2. [02-02 ]Java数据库链接范列

    /* 01 连接池版本的 数据库 连接管理工具,适合于并发场合 */ package cn.tedu.jdbc.day02; import java.io.InputStream; import ja ...

  3. ASO的效果应该如何去评判,有什么标准可以量化指标

    ASO的效果应该如何去评判,有什么标准可以量化指标 以往我们主要会教大家怎么做 ASO 优化,优化中有什么技巧……在掌握ASO优化技巧之后,从执行层面来考虑,就该选择流量平台了. 目前市场上的流量平台 ...

  4. springboot+rediscluster

    @EnableCaching @Configuration public class RedisConfiguration extends CachingConfigurerSupport { @Au ...

  5. How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7

    How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7 $ Solution 已验证 - 已更新2017年六月 ...

  6. LeetCode 122 Best Time to Buy and Sell Stock II 解题报告

    题目要求 Say you have an array for which the ith element is the price of a given stock on day i. Design ...

  7. python 去掉重复元素 学到再添加

    1. python 内置函数 set(可迭代对象) 返回无重复元素的集合.如在分类中,classification为类别数组 set(classification)为类别数 2.numpy np.un ...

  8. php 数据库乱码。。。php 移动临时文件

    数据库乱码,三个位置 处理好不会乱码 第一前台,传到后台: 第二后台,传到数据库: 第三数据库,存入数据库: 详解  https://www.cnblogs.com/zhoujinyi/p/46188 ...

  9. mysql统计库下所有表数据行数

    一.执行下面sql select concat( 'select "', TABLE_name, '", count(*) from ', TABLE_SCHEMA, '.', T ...

  10. 大疆2019校招FPGA笔试总结

    1.对于同步fifo,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,fifo的深度至少为? 写时钟频率 w_clk, 读时钟频率 r_clk, 写时钟周期里,每B个时钟周 ...