[安卓] 19、一个蓝牙4.0安卓DEMO
2016-02-14 12:54
405 查看
[b]一、工程结构&概述[/b]
整个应用包含两个按钮,一个是搜索所有蓝牙设备,另一个是连接所有蓝牙设备~
下面是整个工程的文件结构:
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214080402169-1470344243.png)
[b]二、代码业务流程跟踪[/b]
2.1、两个按钮
下面讲讲该工程里的主要跳转流程及各部分功能:
ActivityMain:
onCreate函数中主要初始化两个按钮并对其绑定监听事件:
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214080528622-1145039686.png)
2.1.1、第一个按钮——蓝牙搜索流程
点击第一个按钮执行scanLeDevice(true)函数:
这里99行的mHandler是产生一个异步的延时SCAN_PERIOD时间然后执行run中的部分的效果~
整体意思是:若传入参数为true则启动蓝牙搜索,经过SCAN_PERIOD时间停止搜索;在搜索过程中可以调用该函数传入false来强行终止搜索。
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214080819763-166667079.png)
当调用startLeScan函数后进入蓝牙搜索阶段,该阶段产生的一些蓝牙信息都会被mLeScanCallback函数监听到:
第126行把搜索到的蓝牙设备放到mLeDeviceList中~
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214081942185-343821755.png)
2.1.2、第二个按钮——蓝牙连接流程
2.1.2.1、蓝牙连接流程——通过intent启动DeviceControlActivity,转到蓝牙设备控制部分
点击第二个按钮执行btn2_click()函数:
该函数把mLeDeviceList中的蓝牙信息通过intent传给DeviceControlActivity,并启动DeviceControlActivity~
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214084213763-1170497430.png)
在DeviceControlActivity的oncreate函数中:
第71行将ActivityMain中传来的设备信息存储到mDeviceName和mDeviceAddress数组中;
第77、78行启动一个BluetoothLeService服务,并用bindService建立一个和蓝牙服务之间的连接;
其中mServiceConnection函数类似于回调函数:监听蓝牙服务连接或断开的信息
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214085240403-1692860856.png)
2.1.2.2、蓝牙连接流程——在蓝牙服务回调函数的onServiceCOnnected监听中初始化蓝牙服务,并建立远程连接
在类似于回调函数的mServiceConnection中的第40行:当已经建立蓝牙服务时,首先41行获取蓝牙服务对象、接着42行对蓝牙服务初始化、最后47行调用connect函数将之前搜索到的设备地址和数量传入函数,进行蓝牙连接(连多个)
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214102243763-346682613.png)
第42行初始化函数主要获得蓝牙适配器:
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214104820653-398272610.png)
第47行connect函数用于连接远程设备:
第214行对每一个远程蓝牙设备连接Gatt服务,其中mGattCallback是Gatt服务的回调函数(这里多个设备共用一个!)
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214105050669-290822529.png)
2.1.2.3、蓝牙连接流程——在Gatt服务的回调函数中解析蓝牙消息,并通过广播发送这些消息
在该回调函数中,对各种事件都是通过调用broadcastUpdate函数,将消息广播出去(这样在主activity中写广播监听函数即可以实现与蓝牙服务的数据沟通)
在该回调函数中重写了连接状态转变监听函数、服务搜索监听函数、读特征数据监听、特征变化监听函数。
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214105550513-1938109478.png)
broadcast有两种:其中一种就是简单的将action消息广播出去
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214112152544-1754438975.png)
另一种是包含特征信息解析的广播:
其中第123行是和传感器数据测量的UUID进行比对,解析该特征是否是有关传感器测量的。如果是,则对信息进行解读~
第137行则是对其他非传感器测量的特征进行处理
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214112728950-222404158.png)
[b]链接[/b]
ps:最初的是eclipse版本的,后来草草地做了个android studio版本,源代码用处不大,本文在于梳理流程
link:http://pan.baidu.com/s/1i4nVe3z
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214124824732-145918745.png)
@beautifulzzzz 2016-02-014 continue~
e-mail:beautifulzzzz@qq.com
整个应用包含两个按钮,一个是搜索所有蓝牙设备,另一个是连接所有蓝牙设备~
下面是整个工程的文件结构:
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214080402169-1470344243.png)
[b]二、代码业务流程跟踪[/b]
2.1、两个按钮
下面讲讲该工程里的主要跳转流程及各部分功能:
ActivityMain:
onCreate函数中主要初始化两个按钮并对其绑定监听事件:
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214080528622-1145039686.png)
2.1.1、第一个按钮——蓝牙搜索流程
点击第一个按钮执行scanLeDevice(true)函数:
这里99行的mHandler是产生一个异步的延时SCAN_PERIOD时间然后执行run中的部分的效果~
整体意思是:若传入参数为true则启动蓝牙搜索,经过SCAN_PERIOD时间停止搜索;在搜索过程中可以调用该函数传入false来强行终止搜索。
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214080819763-166667079.png)
当调用startLeScan函数后进入蓝牙搜索阶段,该阶段产生的一些蓝牙信息都会被mLeScanCallback函数监听到:
第126行把搜索到的蓝牙设备放到mLeDeviceList中~
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214081942185-343821755.png)
2.1.2、第二个按钮——蓝牙连接流程
2.1.2.1、蓝牙连接流程——通过intent启动DeviceControlActivity,转到蓝牙设备控制部分
点击第二个按钮执行btn2_click()函数:
该函数把mLeDeviceList中的蓝牙信息通过intent传给DeviceControlActivity,并启动DeviceControlActivity~
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214084213763-1170497430.png)
在DeviceControlActivity的oncreate函数中:
第71行将ActivityMain中传来的设备信息存储到mDeviceName和mDeviceAddress数组中;
第77、78行启动一个BluetoothLeService服务,并用bindService建立一个和蓝牙服务之间的连接;
其中mServiceConnection函数类似于回调函数:监听蓝牙服务连接或断开的信息
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214085240403-1692860856.png)
2.1.2.2、蓝牙连接流程——在蓝牙服务回调函数的onServiceCOnnected监听中初始化蓝牙服务,并建立远程连接
在类似于回调函数的mServiceConnection中的第40行:当已经建立蓝牙服务时,首先41行获取蓝牙服务对象、接着42行对蓝牙服务初始化、最后47行调用connect函数将之前搜索到的设备地址和数量传入函数,进行蓝牙连接(连多个)
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214102243763-346682613.png)
第42行初始化函数主要获得蓝牙适配器:
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214104820653-398272610.png)
第47行connect函数用于连接远程设备:
第214行对每一个远程蓝牙设备连接Gatt服务,其中mGattCallback是Gatt服务的回调函数(这里多个设备共用一个!)
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214105050669-290822529.png)
2.1.2.3、蓝牙连接流程——在Gatt服务的回调函数中解析蓝牙消息,并通过广播发送这些消息
在该回调函数中,对各种事件都是通过调用broadcastUpdate函数,将消息广播出去(这样在主activity中写广播监听函数即可以实现与蓝牙服务的数据沟通)
在该回调函数中重写了连接状态转变监听函数、服务搜索监听函数、读特征数据监听、特征变化监听函数。
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214105550513-1938109478.png)
broadcast有两种:其中一种就是简单的将action消息广播出去
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214112152544-1754438975.png)
另一种是包含特征信息解析的广播:
其中第123行是和传感器数据测量的UUID进行比对,解析该特征是否是有关传感器测量的。如果是,则对信息进行解读~
第137行则是对其他非传感器测量的特征进行处理
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214112728950-222404158.png)
[b]链接[/b]
ps:最初的是eclipse版本的,后来草草地做了个android studio版本,源代码用处不大,本文在于梳理流程
link:http://pan.baidu.com/s/1i4nVe3z
![](http://images2015.cnblogs.com/blog/506370/201602/506370-20160214124824732-145918745.png)
@beautifulzzzz 2016-02-014 continue~
e-mail:beautifulzzzz@qq.com
相关文章推荐
- 软件工程
- C++ 学习(第一天)C++中调用C编译器的函数的原理
- Maven: 把聚合工程下的项目导入 Ecplise
- iOS百度地图之理论1
- 数据库
- 正则表达式学习笔记
- 组合模式——物以类聚
- spring(数据库)jdbc配置、spring与jdbc编程的结合和jdbc模板方式的使用
- POJ 3744:Scout YYF I 很好的一道概率题
- C++ 学习(第一天)sizeof与strlen 的区别
- iOS xcode忽略警告
- Java中字段、域与成员变量关系
- SVN : 在SVN检测下来的Maven项目没有Maven标志
- python logging
- Block使用要点
- poj1611(超水并查集)
- Sql Server 生成连续日期的方法总结
- 79. Word Search
- phpcms 内部检测用户名长度
- Python 路谱