用webSocket完成实时聊天的工作任务

Android端用webSocket完成实时聊天的工作任务

导读:android端实现websocket通信,我只是会用的程度,与之分享

1.添加网路权限

在AndroidManifest.xml下添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

2.添加依赖库

在build.gradle (module:app)添加java-websocket库

dependencies{
    compile 'org.java-websocket:Java-WebSocket:1.3.0'
}

3.初始化webSocke,handler

在onCreate()调用initWebSocket()

    /**
     * 申明 websocket
     */
    private WebSocketClient mSocketClient;
        /**
     * 处理websocket推来的消息
     */
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    //打开通道
                    Log.d("sll===", "打开通道" + msg.obj);
                    break;
                case 1:
                    //接收消息
                    Log.d("sll===ws推送的消息:", msg.obj + "");
                    //消息处理,将返回的json数据进行处理
                    break;
                case 2:
                    //通道关闭
                    Log.d("sll===ws通道关闭:", msg.obj+"");
                    break;
            }
        }
    };

    /**
    * 在onCreate()调用初始化webSocket()
    **/
   private void initWebSocket() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    mSocketClient = new WebSocketClient(
                    //url后台开发会给你的ws开头的网址,替换成你的地址
                    new URI("ws://192.168.250.38:8181/"),new Draft_17()) {
                        @Override
                        public void onOpen(ServerHandshake handshakedata) {
                            Log.d("sll===", "打开通道" + handshakedata.getHttpStatus());
                            handler.obtainMessage(0, handshakedata.getHttpStatus()).sendToTarget();
                        }

                        @Override
                        public void onMessage(String message) {
                            Log.d("sll===", "接收消息" + message);
                            handler.obtainMessage(1, message).sendToTarget();
                        }

                        @Override
                        public void onClose(int code, String reason, boolean remote) {
                            Log.d("sll===", "通道关闭");
                            handler.obtainMessage(2, reason).sendToTarget();
                        }

                        @Override
                        public void onError(Exception ex) {
                            Log.d("sll===", "链接错误");
                        }
                    };
                    mSocketClient.connect();

                } catch (URISyntaxException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

4.断网后重连

在onCreate()注册广播接收器

        // 注册广播接收器器来跟踪网络连接的变化。
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        receiver = new NetworkReceiver();
        this.registerReceiver(receiver, filter);

广播接收器的代码


    /**
     * 是否是离线状态
     */
    private boolean isHaveOffline = false;

    //是否连上网
    public boolean isOnline() {
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        return (networkInfo != null && networkInfo.isConnected());
    }

class NetworkReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(isOnline()){
                Log.d("sll===", "连上网了...");
                if(isHaveOffline){
                    if(!mSocketClient.getConnection().isOpen()){
                        Log.d("sll===", "再连一次...");
                        //再连一次
                        mSocketClient=null;
                        initWebSocket();
                        //to do things 
                        Log.d("sll===", "连上ws。。。。");
                    }
                }
            }else {
                Log.d("sll===", "网络不可用...");
                isHaveOffline = true;
            }

        }
    }

目录


猜你喜欢

转载自blog.csdn.net/song_liang_liang/article/details/79642539