您的位置:首页 > 移动开发 > Android开发

android蓝牙(二)——接收数据

2014-07-25 11:19 281 查看
在蓝牙开发中,我们有这种一个需求:我们的androidclient要始终保持和蓝牙的连接,当蓝牙有数据返回的时候,androidclient就要及时的收取数据,当蓝牙没有数据返回的时候我们就要保持androidclient和蓝牙之间的连接。这个时候我们就要採取socket来实现和蓝牙之间的连接。做项目使用过http轮询去获取数据,可是发现那样总是有一定的弊端。于是就才用了socket方式去获取数据。

实现步骤: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() {
//处理数据
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: