[安卓] 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 



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/5188660.html,如需转载请自行联系原作者

相关文章
|
6月前
|
JavaScript Java Android开发
uniapp通过蓝牙传输数据 (安卓)
uniapp通过蓝牙传输数据 (安卓)
282 1
|
6月前
|
XML 物联网 API
Android Ble蓝牙App(五)数据操作
Android Ble蓝牙App(五)数据操作
572 0
|
API Android开发 计算机视觉
视觉智能平台有android人脸识别拍照demo?
视觉智能平台有android人脸识别拍照demo么?
103 0
|
6月前
|
Android开发
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
【Android App】蓝牙的设备配对、音频传输、点对点通信的讲解及实战(附源码和演示 超详细)
1154 0
|
3月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
97 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
3月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
116 1
|
6月前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
509 5
|
6月前
|
定位技术 Android开发
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
230 1
|
6月前
|
Android开发
Android监听蓝牙广播
Android监听蓝牙广播
63 1