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{
	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蓝牙(二)——接收数据,布布扣,bubuko.com

时间: 2024-10-16 03:20:11

android蓝牙(二)——接收数据的相关文章

iOS开发- 蓝牙后台接收数据(BLE4.0)

最近在做一个蓝牙相关的项目, 需要在应用进入后台, 或者手机属于锁屏状态的情况下, 仍然保持蓝牙连接, 并且能正常接收数据. 本来以后会很麻烦, 但是学习了下..发现就2步而已.简单的不能再简单了. 好了.下面是具体实现办法. 1.在xxx-info.plist文件中, 新建一行  Required background modes , 加入下面两项. App shares data using CoreBluetooth 和  App communicates using CoreBlueto

Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程

关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢)欢迎指正错误,共同学习.共同进步!!一.Android Bluetooth Architecture蓝牙代码架构部分(google 官方蓝牙框架) Android的蓝牙系统,自下而上包括以下一些

Android学习之路——Android四大组件之activity(二)数据的传递

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据.另一种数据类型是parcelable和serialable 用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下. 一.利用bundle传递基本数据类型 1.启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(inten

Android蓝牙4.0之玩爆智能穿戴、家具(二)【进阶篇】

闲话中心 这几天最大的事可能就是美国总统的上任,双十一,还有乐视股价了,乍一看,好像和我们没什么关系,其实肯定是有的了,要不然他也成不了新闻啊,有一点我们得改变,就是我们必须要希望我们自己国家的企业能过强大,我们必须支持他们,哪怕他做的不够好,这个问题其实就像一个国家一样,我们都知道许多政策是不合理的,或者说有很多制度是坑人的,但是我们不能因为这些而不爱我们的国家,那么企业也是一样,就拿乐视来说,股价跌了,公司遇到资金问题了,你看看这些媒体都在报道什么,全是负面消息,马上倒闭了,或者说是撑不住了

蓝牙连接后,启动子线程接收数据,主线程卡住了

============问题描述============ 我看了下google的bluetoothchat的demo,它那里把蓝牙建立客户端连接的部分也放在子线程里执行的. 我目前的程序,蓝牙建立连接的步骤是在UI线程里,但是bluetoothSocket接收数据的部分是在子线程中的,但是现在碰到一个问题,开启子线程后,主线程不接着往下执行了. 根据我的日志记录,connectedThread.run();之后的日志方法LogHelper.Write("已经运行过子线程");就一直卡着

Android对UDP组播接收数据的有限支持(一)

最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 1 package com.hsocket.Udp; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 7 public class UdpReceiv

Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包

先说明一下粘包的概念: 发送时是两个单独的包.两次发送,但接收时两个包连在一起被一次接收到.在以前 WinCE 下 Socket 编程,确实也要处理粘包的问题,没想到在 Android 下也遇到了.首先想从发送端能否避免这样的问题,例如: (1) 调用强制刷数据完成发送的函数:(2) 设置发送超时.1 先试了调用 flush() 函数,但运行后现象依旧2 设置发送超时是 Windows 平台的做法,但在 Android 平台下是否有类似的设置呢?查看 Socket 类的实现代码:java.net

WebService(二)发送数据+接收数据并进行处理操作

(一)使用WebService发送数据 1.定义webService接口 import java.util.List; import javax.jws.WebParam; import javax.jws.WebService; import com.mxz.fvp.dto.ADto; @WebService public interface MxzReceiveService { public boolean addExpressBarRecord(@WebParam(name = "rec

Android蓝牙串口程序开发

本文主要介绍了针对android的蓝牙串口上位机开发. 一.帧定义 android客户端按照一定的数据帧格式通过蓝牙串口发送数据到连接到MCU的蓝牙从机,MCU接收到数据后,按照帧格式的定义,接收数据帧,并解析数据帧,得到需要的数据. android客户端按照以下帧格式来发送和接收数据. 1.1客户端发送的数据帧内容 帧校验的和是从帧长开始到帧校验前所有数据的和对256取余.即sum%256. pitch roll yaw数据各16位,由高低8位组成.MCU接收数据时需要将其再复合成一个16位数