本文借鉴于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. java学习之路--I/O流

      java基础学习总结——流 一.JAVA流式输入/输出原理

  2. Android 基础知识

    system/app   与   system/priv-app Android4.4系统在system目录下新增了priv-app目录,在该目录下的apk一般都是系统核心应用如Launcher.sy ...

  3. 添加spring-boot-devtools热部署报错

    使用的eclipse部署的spring boot,百度了下,大部分的问题都是说IDE工具使用热部署无法成功的解决方案,看了很懵逼 <!-- 热部署模块 --> <dependency ...

  4. java基础 第八章课后习题

    1.什么是二重循环?在内层循环中使用continue和break语句,程序如何跳转? 答:二重循环就是一个循环结构体内又包含另一个完整的循环结构. continue语句跳转时是跳过了内层循环中的剩余语 ...

  5. 前端面试题汇总(主要为 Vue)

    前端面试题汇总 1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. 1)Model:代表数据模型,数据和业务逻辑都在Model层中定义: 2)View:代 ...

  6. WinAPI 字符及字符串函数(5): IsCharAlpha - 是否是个字母

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  7. layui 重加载

    tableIns.reload({ page: { curr: 1 //重新从第 1 页开始 } }); tableIns为layui 表格定义的函数 var tableIns= table.rend ...

  8. SQL两表之间:根据一个表的字段更新另一个表的字段

    update table1 set field1=table2.field1,field2=table2.field2from table2where table1.id=table2.id

  9. highcharts-3d.js实现饼状图

    嘛,首先,废话一下,这个插件挺好用的.我是因为做亮灯率demo所以接触了它. 首先引用外部文件,jQuery.js,highcharts.js,highcharts-3d.js,好的,这就搞定了第一步 ...

  10. vue框架与koa2服务器实现跨域通信

    首先我们在vue中引入axios, npm install axios --save 在需要用到的页面引入axios import axios from "axios"; 用axi ...