1、改写原来客户端连接封装类,添加监听

/** * @描述 使用socket实现长连接 * @项目名称 App_Chat * @包名 com.android.chat.utils * @类名 TcpUtil * @author chenlin * @date 2012年6月26日 下午4:06:43 * @version 1.0 */public class ConnManager {    protected static final int STATE_FROM_SERVER_OK = 0;    private static String dsName = "192.168.31.239";    private static int dstPort = 10002;    private static Socket socket;    private static ConnManager instance;    private ConnManager() {    }    public static ConnManager getInstance() {        if (instance == null) {            synchronized (ConnManager.class) {                if (instance == null) {                    instance = new ConnManager();                }            }        }        return instance;    }    /**     * 连接     *      * @return     */    public boolean connect(final Handler handler) {        if (socket == null || socket.isClosed()) {            new Thread(new Runnable() {                @Override                public void run() {                    try {                        socket = new Socket(dsName, dstPort);                    } catch (UnknownHostException e) {                        e.printStackTrace();                    } catch (IOException e) {                        throw new RuntimeException("连接错误: " + e.getMessage());                    }                    try {                        // 输入流,为了获取客户端发送的数据                        InputStream is = socket.getInputStream();                        byte[] buffer = new byte[1024];                        int len = -1;                        while ((len = is.read(buffer)) != -1) {                            final String result = new String(buffer, 0, len);                            Message msg = Message.obtain();                            msg.obj = result;                            msg.what = STATE_FROM_SERVER_OK;                            handler.sendMessage(msg);                        }                    } catch (IOException e) {                        throw new RuntimeException("getInputStream错误: " + e.getMessage());                    }                }            }).start();        }        return true;    }    /**     * 连接     *      * @return     */    public void connect() {        if (socket == null || socket.isClosed()) {            try {                socket = new Socket(dsName, dstPort);            } catch (UnknownHostException e) {                e.printStackTrace();            } catch (IOException e) {                throw new RuntimeException("连接错误: " + e.getMessage());            }            try {                // 输入流,为了获取客户端发送的数据                InputStream is = socket.getInputStream();                byte[] buffer = new byte[1024];                int len = -1;                while ((len = is.read(buffer)) != -1) {                    final String result = new String(buffer, 0, len);                    if (mListener !=null) {                        mListener.pushData(result);                    }                }            } catch (IOException e) {                throw new RuntimeException("getInputStream错误: " + e.getMessage());            }        }    }    /**     * 发送信息     *      * @param content     */    public void sendMessage(String content) {        OutputStream os = null;        try {            if (socket != null) {                os = socket.getOutputStream();                os.write(content.getBytes());                os.flush();            }        } catch (IOException e) {            throw new RuntimeException("发送失败:" + e.getMessage());        }    }    /**     * 发送信息     *      * @param auth     */    public void sendAuth(String auth) {        OutputStream os = null;        try {            if (socket != null) {                os = socket.getOutputStream();                os.write(auth.getBytes());                os.flush();            }        } catch (IOException e) {            throw new RuntimeException("发送失败:" + e.getMessage());        }    }    /**     * 关闭连接     */    public void disConnect() {        if (socket != null && !socket.isClosed()) {            try {                socket.close();            } catch (IOException e) {                throw new RuntimeException("关闭异常:" + e.getMessage());            }            socket = null;        }    }    public  interface  ConnectionListener{        void pushData(String str);    }    private ConnectionListener mListener;    public void setConnectionListener(ConnectionListener listener){        this.mListener = listener;    }}

2、创建Service, 在Service进行连接,在监听方法里使用PushReceiver广播把数据发送出去,通知界面更新
1)先创建广播PushReceiver

public abstract class PushReceiver extends BroadcastReceiver {    public static final String ACTION = "com.java.chat.action";     public static final String DATA = "data";   }

2)创建服务

public class ConnService extends Service implements ConnectionListener{    private ConnManager mConnManager;    @Override    public IBinder onBind(Intent intent) {        return null;    }    /**     * 连接服务     */    @Override    public void onCreate() {        super.onCreate();        new Thread(new Runnable() {            @Override            public void run() {                mConnManager = ConnManager.getInstance();                mConnManager.setConnectionListener(ConnService.this);                mConnManager.connect();                //发送验证码                mConnManager.sendAuth("#A");            }        }).start();    }    @Override    public void pushData(String data) {        Intent intent = new Intent();        intent.setAction(PushReceiver.ACTION);        intent.putExtra(PushReceiver.DATA, data);        sendBroadcast(intent);    }}

3、修改客户端

public class ClientActivity extends Activity {    private EditText mEtContent;    private ConnManager manager;    private PushReceiver mPushReceiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        manager = ConnManager.getInstance();        mEtContent = (EditText)findViewById(R.id.et);        initReceiver();    }    private void initReceiver() {        mPushReceiver = new PushReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                if (PushReceiver.ACTION.equals(intent.getAction())) {                    String response = intent.getStringExtra(PushReceiver.DATA);                    ToastUtil.show(ClientActivity.this, response);                }            }        };        IntentFilter filter = new IntentFilter(PushReceiver.ACTION);        registerReceiver(mPushReceiver, filter);    }    /**     * 发送信息     * @param view     */    public void clickMessage(View view){        if (mEtContent.getText()!= null) {            manager.sendMessage(mEtContent.getText().toString());        }    }    /**     * 断开连接     * @param view     */    public void clickDisConnect(View view){        manager.disConnect();    }    @Override    protected void onDestroy() {        manager.disConnect();        unregisterReceiver(mPushReceiver);        super.onDestroy();    }}

———————————————————————
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
有需求者请进站查看,非诚勿扰

https://item.taobao.com/item.htm?spm=686.1000925.0.0.4a155084hc8wek&id=555888526201

01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–

更多相关文章

  1. Android检测手机或PAD是否连网
  2. Android开发之连接MySQL数据库(一)
  3. Android(安卓)WiFi直连 双向通信
  4. [Android(安卓)GMS 认证] CTS 测试准备
  5. 赵雅智:Android短信发送器
  6. android网格连接
  7. 支付宝小程序(ble 适配android和ios) 入门一
  8. 谈谈Android中WIFI 架构和控制流程
  9. Android(安卓)Sensor 架构深入剖析

随机推荐

  1. 使用User Agent分辨出Android设备类型的
  2. 4.4以上android沉浸式
  3. 在 Android 模拟器中启用摄像头支持
  4. Android 基础总结:(十)ContentResolver
  5. Android之UI学习篇二:TextVeiw显示表情和
  6. Android中Intent传递对象的两种方法(Seri
  7. Android总结篇系列:Android广播机制
  8. Android App开发基础篇—四大组件之Conte
  9. Android L添加kk版的OOBE开机向导
  10. Android开发学习笔记(十一)ListView/Activi