展会信息港展会大全

android蓝牙(二)——接收数据
来源:互联网   发布日期:2015-09-28 15:57:58   浏览:1735次  

导读: 在蓝牙开发中,我们有这样的一个需求:我们的android客户端要始终保持和蓝牙的连接,当蓝牙有数据返回的时候,android客户端就要及时的收取数据,当蓝牙没有数据返回的时候我们就要保持...

在蓝牙开发中,我们有这样的一个需求:我们的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;;//状态

@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{

privateSocket 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开发

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港