原文地址:
https://blog.csdn.net/vnanyesheshou/article/details/51943870
一 环境
开发环境:
jdk1.6 Eclipse
or jdk1.8 AS3.0.1
运行环境:
华为V10(Android8.0)
实现功能:
Android 蓝牙BLE (搜索设备、蓝牙连接、通信等)。
二 代码结构
三、程序实现
一、ble简单介绍
BLE: Bluetooth Low Energy,即蓝牙低功耗,它是一种技术,从蓝牙4.0开始支持。蓝牙低功耗芯片有两种模式:单模和双模。
单模:只能执行低功耗协议栈,也就是只支持ble。
双模:支持传统蓝牙以及ble的使用。
较传统蓝牙:传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电低等优点。
关键术语和概念:
Gatt:(Generic Attribute Profile)—通用属性配置文件,用于在ble链路上发送和接收被称为“属性”的数据块。目前所有的ble应用都是基于GATT的。一个设备可以实现多个配置文件。
ble交互的桥梁是Service、Characteristic、Desciptor。
Characteristic:可以理解为一个数据类型,它包括一个value和0至多个对此characteristic的描述(Descriptor)。
Descriptor:对Characterisctic的描述,如范围、单位等。
Service:Characteristic的集合。它可以包含多个Characteristic。
一个ble终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个value和多个Descriptor,一个Descriptor包含一个value。其中Characteristic比较重要,用的比较多。
这三部分都由UUID作为唯一标示符,以此区分。
UUID(Universally Unique Identifier),含义是通用唯一识别码,它是在一定范围内唯一的机器生成的标识符。标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)。
ble中有四个角色:
广播者(Braodcaster):广播发送者,是不可连接的设备。
观察者(Observer):扫描广播,不能够启动连接。
广播者和观察者不能建立连接。应用:温度传感器和温度显示器。
外围(periphery):广播发送者,可连接的设备,在单一链路层作为从机。
中央(central):扫描广播,启动连接,在单一或多链路层作为主机。
中央和外围可以进行配对、连接、数据通信。应用:手机和手表。
一个中央可以同时连接多个周边,但是一个周边只能连接一个中央(但是我测试,周边可以连接多个中央设备,并且能正常通信)。
二、Android
注意:Android 4.3(API 18)引入ble相关接口。
相关类
目录:frameworks/base/core/java/android/bluetooth/
BluetoothGatt:中央使用和处理数据;
BluetoothGattCallback:中央的回调。
BluetoothGattServer:周边提供数据;
BluetoothGattServerCallback:周边的回调
BluetoothGattService:Gatt服务
BluetoothGattCharacteristic:Gatt特性
BluetoothGattDescriptor:Gatt描述
2.1 中央设备
搜索ble设备
//搜索附近所有的外围设备
mBluetoothAdapter.startLeScan(mLeScanCallback);
//搜索某些uuid的外围设备。
mBluetoothAdapter.startLeScan(uuid[] ,mLeScanCallback);
停止扫描
mBluetoothAdapter.stopLeScan(m