Empuje de noticias de Android websocket

2019-09-25 Se agregó una nueva dirección de prueba: wss: //echo.websocket.org // https://www.websocket.org/echo.html

// Enviar String data
void send (String text);
// Enviar byte [] data
void send (byte [] bytes);
// Enviar ByteBuffer data
void send (ByteBuffer byteBuffer);
Además de los tres métodos convencionales de envío de datos anteriores , También proporciona métodos para enviar ping / pong

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


 cuerpo:

El proyecto necesita usar socket push para usar un websocket de terceros. Toma nota

Integración de Gradle

Agregue dependencia en build.gradle del modelo correspondiente:

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

Supongo que te gusta

Origin blog.csdn.net/qq_36355271/article/details/99875118
Recomendado
Clasificación