Android 手机端实现聊天功能(webSocket)

即时通讯,在目前的项目中基本上达到家家必备的程度了。这次我们就来解析即时通讯的实现

1.引用webSocket

本文我们通过websocket来实现即时通讯,首先我们在app.build中添加webSocket依赖:

    //webSocket
    implementation 'org.java-websocket:Java-WebSocket:1.5.2'

2.实现webSocket服务端

接着我们来创建一个类,MyWebSocketSererver用来继承webSocket给我们提供的WebSocketServer,然后我们去实现WebSocketServer中需要实现的方法:

public class MyWebSocketServer extends WebSocketServer {

    private final Context context;
    
    //定义构造方法,参数一为上下文参数,参数二为自己定义的服务端端口号
    public MyWebSocketServer(Context context,int port){
        super(new InetSocketAddress(port));
        this.context = context;
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        //与客户端连接成功时调用
    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
       //与客户端断开连接时调用
    }

    @Override
    public void onMessage(WebSocket conn, String message) {
       //收到客户端发来的消息时调用
    }

    @Override
    public void onError(WebSocket conn, Exception ex) {
       //与客户端连接失败时调用
    }

    @Override
    public void onStart() {
        //服务端创建成功时调用
    }

}

到这里其实还不算完,因为我们也需要在服务端接收客户端发送过来的消息并且显示出来,所以我们也需要在onMessage()方法中做接收的处理,这边我们通过广播接收客户端发送过来的消息,然后在实现webSocket服务端的地方去注册广播,接收广播发送过来的消息。

    public void onMessage(WebSocket conn, String message) {
        Log.d(TAG,"onMessage message ==" + message);
        Intent intent = new Intent();
        intent.setAction("com.example.mvvm.server");
        intent.putExtra("message", message);
        context.sendBroadcast(intent);
    }

接下来我们去activity中实现我们的webSocket服务端:

public class WebSocketServerActivity extends BaseActivity<BaseViewModel, ActivityWebSocketServcectivityBinding> {

    private List<TalkBean> talkBeanList;

    private TalkMessageAdapter talkMessageAdapter;

    private SocketServerReceiver socketServerReceiver;

    private MyWebSocketServer myWebSocketServer;

    private static final String TAG = "WebSocket --> Activity";

    @Override
    protected int getLayoutId() {
        return R.layout.activity_web_socket_servcectivity;
    }

    @Override
    protected void initDate() {
        initView();
        doRegisterReceiver();
        createServer();
    }

    private void createServer() {
        //创建webSocket服务端
        myWebSocketServer = new MyWebSocketServer(this, 8888) {
            @Override
            public void onOpen(WebSocket conn, ClientHandshake handshake) {
                super.onOpen(conn, handshake);
                //判断是否连接成功
                if (conn != null && conn.isOpen()) {
                    //服务端发送消息点击事件
                    viewDateBinding.btnSend.setOnClickListener(view -> {
                        conn.send(viewDateBinding.etMessage.getText().toString());
                        talkBeanList.add(new TalkBean(false, viewDateBinding.etMessage.getText().toString()));
                        talkMessageAdapter.notifyDataSetChanged();
                    });
                }
            }
        };
        //开启服务端
        myWebSocketServer.start();
    }

    private void doRegisterReceiver() {
        socketServerReceiver = new SocketServerReceiver(talkBeanList, talkMessageAdapter);
        IntentFilter filter = new IntentFilter("com.example.mvvm.server");
        registerReceiver(socketServerReceiver, filter);
    }

    private void initView() {
        LinearLayoutManager linearLayoutManager = new L
  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值