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


       在蓝牙开发中,我们有这种一个需求:我们的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() {
    	//处理数据	
    	}
    }




  • 相关阅读:
    Numpy基本介绍
    Java中的<< 和 >> 和 >>> 详细分析
    Matplotlib绘制基本图像
    Matplotlib基本使用
    最新动态:开源项目 ionic3-awesome — 实现生成带logo二维码组件
    最新动态:开源项目 ionic3-awesome — 实现iframe嵌入外部网页
    最新动态: 开源项目 ionic3-awesome — 实现多主题功能
    Angular5强势来袭
    js中对象的拷贝,浅拷贝和深拷贝
    vue2 + element-ui + axios 开源项目推荐
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3867569.html
Copyright © 2020-2023  润新知