android蓝牙(二)——接收数据
2014-07-25 11:19
281 查看
在蓝牙开发中,我们有这种一个需求:我们的androidclient要始终保持和蓝牙的连接,当蓝牙有数据返回的时候,androidclient就要及时的收取数据,当蓝牙没有数据返回的时候我们就要保持androidclient和蓝牙之间的连接。这个时候我们就要採取socket来实现和蓝牙之间的连接。做项目使用过http轮询去获取数据,可是发现那样总是有一定的弊端。于是就才用了socket方式去获取数据。
实现步骤:1、启动一个service去监听是否有数据返回。一旦有数据返回就启动一个线程去处理数据
2、处理完数据,通过广播去通知UI。
在开发中,假设採用循环方式去监听数据非常easy产生一些bug。由于java中的socket默认是堵塞的,循环有可能会造成退出不了。我自己用了几个状态值来实现对其的控制
service类
实现步骤:1、启动一个service去监听是否有数据返回。一旦有数据返回就启动一个线程去处理数据
2、处理完数据,通过广播去通知UI。
在开发中,假设採用循环方式去监听数据非常easy产生一些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; ; //状态 @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return 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; } @Override public void run() { Receive(); } private void Receive() { //处理数据 } }
相关文章推荐
- android 蓝牙编程重点---如何发送和接收16进制数据
- android 蓝牙编程重点---如何发送和接收16进制数据
- android 蓝牙编程重点---如何发送和接收16进制数据
- Android蓝牙搜索设备,向其发送数据并接收-刘宇
- Android:蓝牙接收心电计数据 绘制心电图
- Android接收蓝牙万用表数据
- android蓝牙(二)——接收数据
- Android安卓蓝牙BLE 扫描连接接收数据 封装好的类
- Android开发蓝牙篇之蓝牙配对、连接与接收数据
- Android通过蓝牙与单片机(HC-05)进行通信,接收数据
- Android 低功耗蓝牙的多设备连接与数据接收,简单实现
- Android蓝牙搜索设备,向其发送数据并接收
- android 蓝牙编程重点---如何发送和接收16进制数据
- android 蓝牙编程重点---如何发送和接收16进制数据
- android 蓝牙编程重点---如何发送和接收16进制数据
- Android蓝牙开发之数据窜位和数据接收错误以及重组字节数据
- android接收到蓝牙配对请求时如何点亮屏幕具体实现
- android 通过蓝牙接收文件,从历史传输记录打开,无法自动选择合适的应用程序
- android客户端接收C#服务器的数据时,有时候会多一些空值,为啥子哟
- Android接收jsp中动态生成的xml或json数据。