[安卓] 19、一个蓝牙4.0安卓DEMO
一、工程结构&概述
整个应用包含两个按钮,一个是搜索所有蓝牙设备,另一个是连接所有蓝牙设备~
下面是整个工程的文件结构:

二、代码业务流程跟踪
2.1、两个按钮
下面讲讲该工程里的主要跳转流程及各部分功能:
ActivityMain:
onCreate函数中主要初始化两个按钮并对其绑定监听事件:

2.1.1、第一个按钮——蓝牙搜索流程
点击第一个按钮执行scanLeDevice(true)函数:
这里99行的mHandler是产生一个异步的延时SCAN_PERIOD时间然后执行run中的部分的效果~
整体意思是:若传入参数为true则启动蓝牙搜索,经过SCAN_PERIOD时间停止搜索;在搜索过程中可以调用该函数传入false来强行终止搜索。

当调用startLeScan函数后进入蓝牙搜索阶段,该阶段产生的一些蓝牙信息都会被mLeScanCallback函数监听到:
第126行把搜索到的蓝牙设备放到mLeDeviceList中~

2.1.2、第二个按钮——蓝牙连接流程
2.1.2.1、蓝牙连接流程——通过intent启动DeviceControlActivity,转到蓝牙设备控制部分
点击第二个按钮执行btn2_click()函数:
该函数把mLeDeviceList中的蓝牙信息通过intent传给DeviceControlActivity,并启动DeviceControlActivity~

在DeviceControlActivity的oncreate函数中:
第71行将ActivityMain中传来的设备信息存储到mDeviceName和mDeviceAddress数组中;
第77、78行启动一个BluetoothLeService服务,并用bindService建立一个和蓝牙服务之间的连接;
其中mServiceConnection函数类似于回调函数:监听蓝牙服务连接或断开的信息

2.1.2.2、蓝牙连接流程——在蓝牙服务回调函数的onServiceCOnnected监听中初始化蓝牙服务,并建立远程连接
在类似于回调函数的mServiceConnection中的第40行:当已经建立蓝牙服务时,首先41行获取蓝牙服务对象、接着42行对蓝牙服务初始化、最后47行调用connect函数将之前搜索到的设备地址和数量传入函数,进行蓝牙连接(连多个)

第42行初始化函数主要获得蓝牙适配器:

第47行connect函数用于连接远程设备:
第214行对每一个远程蓝牙设备连接Gatt服务,其中mGattCallback是Gatt服务的回调函数(这里多个设备共用一个!)

2.1.2.3、蓝牙连接流程——在Gatt服务的回调函数中解析蓝牙消息,并通过广播发送这些消息
在该回调函数中,对各种事件都是通过调用broadcastUpdate函数,将消息广播出去(这样在主activity中写广播监听函数即可以实现与蓝牙服务的数据沟通)
在该回调函数中重写了连接状态转变监听函数、服务搜索监听函数、读特征数据监听、特征变化监听函数。

broadcast有两种:其中一种就是简单的将action消息广播出去

另一种是包含特征信息解析的广播:
其中第123行是和传感器数据测量的UUID进行比对,解析该特征是否是有关传感器测量的。如果是,则对信息进行解读~
第137行则是对其他非传感器测量的特征进行处理

链接
ps:最初的是eclipse版本的,后来草草地做了个android studio版本,源代码用处不大,本文在于梳理流程
link:http://pan.baidu.com/s/1i4nVe3z

@beautifulzzzz 2016-02-014 continue~
e-mail:beautifulzzzz@qq.com
[安卓] 19、一个蓝牙4.0安卓DEMO的更多相关文章
- Android5.0(Lollipop) BLE蓝牙4.0+浅析demo连接(三)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/23363591来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Android5.0(L ...
- android5.0 BLE 蓝牙4.0+浅析demo搜索(一)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/23341414来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Bgwan 莳萝花 ...
- Android低功耗蓝牙(蓝牙4.0)——BLE开发(上)
段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝牙技术联盟在2010年6月30号公布了蓝牙4.0标准,4.0标准在蓝牙3.0 ...
- ym——物联网入口之中的一个Android蓝牙4.0
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 假设还有同学不知道蓝牙4.0能够做什么请查看Android+蓝牙 4.0 将带来什么? ...
- https://github.com/coolnameismy/BabyBluetooth github上的一个ios 蓝牙4.0的库并带文档和教程
The easiest way to use Bluetooth (BLE )in ios,even bady can use. 简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和 ...
- 移动端安卓手机不能识别border 0.5px解决方案
由于安卓手机无法识别border 0.5px,因此我们要用0.5px的话必须要借助css3中的-webkit-transform:scale缩放来实现, 原理:将伪元素的宽设为200%,height设 ...
- 恩布900手机客服,安卓版本号Entboost Android 1.0 正式公布
恩布900手机客服,安卓版本号Entboost Android 1.0正式公布,支持一行代码在安卓手机实如今线客服的功能,支持文本.表情,图片,语音和离线消息等. ENTBOOST是跨平台.跨应用的实 ...
- ugui SetParent在安卓上一个诡异bug
问题描述 我的环境:Unity3D 5.3.7 出问题机型:安卓模拟器.部分低配安卓机型(比如:红米2A) 以下代码是设置某个节点的父节点,在PC.Editor.大部分手机上都是正常的,但问题机型上, ...
- RF-BM-S02(V1.0)蓝牙4.0模块 使用手册
一.产品概述 图1 RF-BM-S02纯硬件模块 RF-BM-S02是一款采用美国德州仪器TI 蓝牙4.0 CC2540作为核心处理器的高性能.超低功耗(Bluetooth Low Energy)射频 ...
随机推荐
- Jmeter学习
网址: http://www.ltesting.net/ceshi/open/kyxncsgj/jmeter/ http://www.cnblogs.com/TankXiao/p/4059378.ht ...
- 结合阿里云服务器,设置家中jetson tk1随时远程登陆
前提条件: 1.路由配置dmz主机为tk1的ip ,设置路由器中ssh 端口22的访问权限 2.有一台远程服务器,服务器安装了php可以运行php文件(我使用的是阿里云) 家中tk1配置: 脚本pyt ...
- ie8 iframe去掉边框的属性
<iframe src="" id="Iframe" height="200" frameborder="0" s ...
- J2EE中EL表达式
EL全名为Expression Language. EL语法很简单,主要的语法结构是${sessionScope.user.sex}所有EL都是以${为起始.以}为结尾的. 上述EL范例的意思是:从S ...
- ubuntu14.04设置terminal配色方案以配合使用vim的Solarized插件
在安装vim插件之前,首先安装Vundle插件,用来管理vim插件,安装方法查看Vundle在github上的指南.在安装vundle的时候出现了一个错误E117:unknown function v ...
- C# 换行符
winform 中 TextBox 的 Multiline属性设置为 true ,敲入几个字符和几个回车,然后保存到数据库,再从数据库中读取出来赋值给TextBox,换行符丢失.将读取出的字符串中的& ...
- 简单的dp
有趣的数:(动态规划,状态转移) #include<stdio.h> ][]; int main() { int n,i; ; i<; i++) dp[i][]=; while(~s ...
- DEV GridControl双击行事件
首先,需要将gridview1.OptionsBehavior.Editable设为false //双击行弹出nodeDetail信息 private void gridView1_MouseDown ...
- [c语言]字符数组、字符串定义
C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...
- Font Awesome图标库
Font Awesome 是一个非常方便的图标库.这些图标都是矢量图形,被保存在 .svg 的文件格式中.这些图标就和字体一样,你可以通过像素单位指定它们的大小,它们将会继承其父HTML元素的字体大小 ...