logo资料库

蓝牙的接收.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
android 蓝牙(二)——接收数据 分类: android 蓝牙开发 2014-04-27 14:28 395 人阅读 评论(0) 收藏 举报 在蓝牙开发中,我们有这样的一个需求:我们的 android 客户端要始 终保持和蓝牙的连接,当蓝牙有数据返回的时候,android 客户端就要 及时的收取数据,当蓝牙没有数据返回的时候我们就要保持 android 客 户端和蓝牙之间的连接。这个时候我们就要采取 socket 来实现和蓝牙 之间的连接。做项目使用过 http 轮询去获取数据,但是发现那样总是有 一定的弊端。于是就才用了 socket 方式去获取数据。 实现步骤:1、启动一个 service 去监听是否有数据返回。一旦有数 据返回就启动一个线程去处理数据 2、处理完数据,通过广播去通知 UI。 在开发中,如果采用循环方式去监听数据很容易产生一些 bug。因 为 java 中的 socket 默认是阻塞的,循环有可能会造成退出不了。我自 己用了几个状态值来实现对其的控制 service 类 [java] view plaincopy 1. /** * 2. 3. * @author li *负责监听启动应用程序 后的接收数据 4. 5. */ 6. public class ReceiveThread extends Service { 7. 8. 9. private Socket socket; private String workStatus;// 当前工作状况,null 表示正在处理,success 表示处 理成功,failure 表示处理失败 10. public static Boolean mainThreadFlag = true; ; //状态
11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. @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, so cket)); } } 24. 25. 26. 27. 28. } Thread [java] view plaincopy this.context=context; this.client=client; Socket client=null; private private Context context=null; public ThreadReadWriterSocketServer(Context context,Socket client) { 1. public class ThreadReadWriterSocketServer implements Runnable{ 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. } private void Receive() { //处理数据 } } } @Override public void run() { Receive();
分享到:
收藏