在蓝牙开发中,我们有这样的一个需求:我们的android客户端要始终保持和蓝牙的连接,当蓝牙有数据返回的时候,android客户端就要及时的收取数据,当蓝牙没有数据返回的时候我们就要保持android客户端和蓝牙之间的连接。这个时候我们就要采取socket来实现和蓝牙之间的连接。做项目使用过http轮询去获取数据,但是发现那样总是有一定的弊端。于是就才用了socket方式去获取数据。

实现步骤:1、启动一个service去监听是否有数据返回。一旦有数据返回就启动一个线程去处理数据

2、处理完数据,通过广播去通知UI。

在开发中,如果采用循环方式去监听数据很容易产生一些bug。因为java中的socket默认是阻塞的,循环有可能会造成退出不了。我自己用了几个状态值来实现对其的控制

service类

/** *  * @author li *负责监听启动应用程序 后的接收数据 */public class ReceiveThread extends Service {    private Socket socket;    private String workStatus;// 当前工作状况,null表示正在处理,success表示处理成功,failure表示处理失败    public static Boolean mainThreadFlag = true;  ;  //状态@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}private void doListen(){Log.d("chl", "doListen()");//开始监听while (mainThreadFlag){         //开始监听数据      new Thread(new ThreadReadWriterSocketServer(ReceiveThread.this, socket));}}}
Thread

public class ThreadReadWriterSocketServer implements Runnable{private  Socket client=null;private Context context=null;public ThreadReadWriterSocketServer(Context context,Socket client){this.context=context;this.client=client;}@Overridepublic void run(){Receive();}private void Receive() {//处理数据}}




更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理
  3. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  6. Android(安卓)PC投屏简单尝试(录屏直播)2—硬解章(MediaCodec+RM
  7. android设备连接蓝牙外设导致activity重启(recreate)的问题
  8. Android中 Intent/Bundle传递对象取值为null的剖析以及Serializa
  9. Android客户端消息推送原理简介

随机推荐

  1. Android串口通信
  2. 【Android】 从头搭建视频播放器(3)——手
  3. Native层HIDL服务的获取原理-Android10.0
  4. Android WiFi接口理解
  5. Android getDimensionPixelSize, 代码中
  6. Android学习系列之三
  7. Android编译系统简要介绍和学习计划
  8. Android(安卓)网络通信——Volley
  9. android如何支持多屏幕
  10. 《Android 开发工程师面试指南》