Android websocket 消息推送

2019-09-25 新加测试地址 :wss://echo.websocket.org      //https://www.websocket.org/echo.html

//发送 String 数据
void send(String text);
//发送 byte[] 数据
void send(byte[] bytes);
//发送 ByteBuffer 数据
void send(ByteBuffer byteBuffer);
除了上述三个常规的发送数据方法外,还提供了用于发送 ping/pong 的方法

//发送 ping
void sendPing();
//发送 pong
void sendPong();
//发送 pong
void sendPong(PingFrame pingFrame);


 正文:

项目需要使用socket推送 使用了一个第三方的websocket 。记录笔记

Gradle 方式集成

在对应 model 的 build.gradle 中添加依赖:

implementation 'com.github.0xZhangKe:WebSocketDemo:3.1'
 
在 activity 或者 Myapplication 进行websocket 设置和连接
private void initWebSocket(){
        WebSocketSetting setting = new WebSocketSetting();
        //连接地址,必填,例如 wss://echo.websocket.org
        setting.setConnectUrl("your connect url");//必填

        //设置连接超时时间
        setting.setConnectTimeout(15 * 1000);

        //设置心跳间隔时间
        setting.setConnectionLostTimeout(60);

        //设置断开后的重连次数,可以设置的很大,不会有什么性能上的影响
        setting.setReconnectFrequency(60);

//        //设置Header
//        setting.setHttpHeaders(header);

        //设置消息分发器,接收到数据后先进入该类中处理,处理完再发送到下游
        setting.setResponseProcessDispatcher(new AppResponseDispatcher());
        //接收到数据后是否放入子线程处理,只有设置了 ResponseProcessDispatcher 才有意义
        setting.setProcessDataOnBackground(true);

        //网络状态发生变化后是否重连,
        //需要调用 WebSocketHandler.registerNetworkChangedReceiver(context) 方法注册网络监听广播
        setting.setReconnectWithNetworkChanged(true);

        //通过 init 方法初始化默认的 WebSocketManager 对象
        WebSocketManager manager = WebSocketHandler.init(setting);
        //启动连接
        manager.start();

        //注意,需要在 AndroidManifest 中配置网络状态获取权限
        //注册网路连接状态变化广播
        WebSocketHandler.registerNetworkChangedReceiver(this);
    }
在 activity 中注册socket监听p
rivate SocketListener socketListener = new SimpleListener() {
    @Override
    public void onConnected() {
        appendMsgDisplay("onConnected");
    }

    @Override
    public void onConnectFailed(Throwable e) {
        if (e != null) {
            appendMsgDisplay("onConnectFailed:" + e.toString());
        } else {
            appendMsgDisplay("onConnectFailed:null");
        }
    }

    @Override
    public void onDisconnect() {
        appendMsgDisplay("onDisconnect");
    }

    @Override
    public void onSendDataError(ErrorResponse errorResponse) {
        appendMsgDisplay(errorResponse.getDescription());
        errorResponse.release();
    }

    @Override
    public <T> void onMessage(String message, T data) {
        if (data instanceof CommonResponseEntity) {
            CommonResponseEntity responseEntity = (CommonResponseEntity) data;
            appendMsgDisplay(responseEntity.getMessage());
        }
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    WebSocketHandler.getDefault().addListener(socketListener);
}
//发送数据

private void initView() {
    tvMsg = (TextView) findViewById(R.id.tv_msg);

    findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String text = etContent.getText().toString();
            if (TextUtils.isEmpty(text)) {
                Toast.makeText(MainActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show();
                return;
            }
            WebSocketHandler.getDefault().send(text);
        }
    });
}
 在onDestroy 移除 监听
@Override
protected void onDestroy() {
    super.onDestroy();
    WebSocketHandler.getDefault().removeListener(socketListener);
}

private void appendMsgDisplay(String msg) {
    StringBuilder textBuilder = new StringBuilder();
    if (!TextUtils.isEmpty(tvMsg.getText())) {
        textBuilder.append(tvMsg.getText().toString());
        textBuilder.append("\n");
    }
    textBuilder.append(msg);
    textBuilder.append("\n");
    tvMsg.setText(textBuilder.toString());
}

也可以直接移到service中使用

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值