[安卓] 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)射频 ...
随机推荐
- shell学习--grep2
grep相关的练习,解释下面grep表达式的含义: grep '\<Tom\>' file 打印file中包含单词 Tom的行 grep 'Tome Savage' file 打印file ...
- SQL Split
最初是根据数据ID批量删除数据,因为不知道到底是要删除多少条,而T-sql里也没有像C#中params这样方便的东西,所以想到字符串分割,但是发现T-sql中也没有提供字符串分割的函数,所以自己搜索了 ...
- maven 环境的配置 JAVA_HOME not found in your envirnment
maven 的环境配置在配置maven前 先做好java的环境配置现在假定java已经配置好了.在环境变量中添加;maven的解压路径\bin 例如:D:\soft\java\apache-maven ...
- Mysql 变量使用
mysql 中可以将所查询到的数据用变量存储下来,供后面使用 语法:SELECT @变量名 := 变量值 eg: SELECT @cid:=class_id, (SELECT class_name F ...
- Openlayers+Geoserver(一):项目介绍以及地图加载
项目验收完,趁着事情不是很多,对这个项目进行梳理.我主要负责地图模块,网站其他模块主要有两个,一个是报表,主要是100多张报表,技术没有难度,主要是工作量的问题.另一个是数据的校验,就是 ...
- 在 Mac OS 上使用 TypeScript 编写 ASP.NET Core 1.0 应用
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Eclipse插件收集
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [在Eclipse文件列表中打开文件所在 ...
- [LeetCode]436 Find Right Interval
Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...
- Notes for Studying Django
Once you added a new application to INSTALLED_APPS, the database tables need to be updated, thus you ...
- day12---python mysql pymsql sqlalchemy ORM
RDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语: 数据库: 数据库是一些关联表的集合.. 数据表: 表是数据的矩阵.在一个数据库中的表看起来像一个简单的电子表 ...