Android websocket news push

2019-09-25 New test address added: wss://echo.websocket.org // https://www.websocket.org/echo.html

//Send String data
void send(String text);
//Send byte[] data
void send(byte[] bytes);
//Send ByteBuffer data
void send(ByteBuffer byteBuffer);
In addition to the above three conventional data sending methods , Also provides methods for sending ping/pong

//Send ping
void sendPing();
//Send pong
void sendPong();
//Send pong
void sendPong(PingFrame pingFrame);


 Body:

The project needs to use socket push to use a third-party websocket. Take notes

Gradle integration

Add dependency in build.gradle of corresponding model:

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中使用

Guess you like

Origin blog.csdn.net/qq_36355271/article/details/99875118