低功耗蓝牙(BLE)官方文档翻译

更新时间:2023-05-23 15:01:17 阅读: 评论:0

低功耗蓝⽛(BLE)官⽅⽂档翻译翻译之间先看⼏张BLE Stack图:
BLE Stack:
BLE GATT stack:
低功耗蓝⽛(Bluetooth Low Energy)
Android4.3(API 18)引⼊BLE低功耗蓝⽛,并且提供了相应的API供应⽤程序搜索蓝⽛设备,查询服务,读写特性.与经典蓝⽛相⽐,BLE的显著特点是低功耗, 使得android应⽤可以和具有低功耗要求的蓝⽛设备进⾏通讯,如传感器,⼼率检测器,健⾝设备等等.
关键术语和概念(Key Terms and Concerpt)
Generic Attribute Profile(GATT): 通⽤属性协议
GATT配置⽂件是⼀个通⽤的规范, ⽤于在BLE链路上发送和接收被称为”属性”的数据块.⽬前所有的BLE应⽤都是基于GATT.
蓝⽛SIG规定了许多低功耗设备的配置⽂件.配置⽂件就是设备如何在特定应⽤中运转的规格说明.注意⼀个设备可以实现多个配置⽂件,例如:⼀个设备可以包含⼼率监测器和电量检测器.
Attribute Protocol(ATT) 属性协议
今年高考天气
有关春天的作文GATT是建⽴在ATT协议的基础上的.ATT对在BLE设备上运⾏做了优化,为此他使⽤了尽可能少的字节,每个属性都通过⼀个唯⼀的统⼀标识符(UUID)来标识,每个String类型的UUID使⽤是128bit标准格式,属性通过ATT被格式化为characteristics 和rvices
Characteristic 特性
⼀个CXharacteristic包含⼀个单⼀变量和0-n个⽤来描述characteristic变量的descriptor,characteristic可以被认为是⼀个类型, 类似于类.
Descriptor 描述
Descriptor⽤来描述characteristic变量的属性.例如,⼀个descriptor可以规定⼀个可读的描述,或者⼀个characteristic变量可接受的范围,或者⼀个characteristic变量特定的测量单位.
秋千简笔画Service 服务
rvice是characteristic的集合.例如,你可能有⼀个叫Heart rate minitord的rvice,他包含了很多characteristic,如 heart rate measurement等等.可在找到⼀个⽬前⽀持基于AGTT的配置⽂件和服务列表
⾓⾊和责任(Roles & Responsiblity)
⼀下是android设备和BLE设备交互时的⾓⾊和责任
中央 vs 外设: 使⽤与BLE连接本⾝.中央设备扫描,寻找⼴播,外围设备发出⼴播
GATT服务端 vs GATT客户端: 决定了两个设备在建⽴连接后如何交互
为了⽅便理解,想象你有⼀个⽤于活动跟踪BLE设备,⼿机⽀持中央⾓⾊,后动跟踪器⽀持外围活动(为了建⽴BLE连接你需要注意两件事,只⽀持外围设备的两⽅或者只⽀持中央设备的两⽅不能互相通讯.
当⼿机和运动跟踪器建⽴连接后,他们开始向另⼀⽅传输GATT数据.哪⼀⽅作为服务器取决于他们传输数据的种类.例如,如果运动跟踪器想向⼿机报告传感器数据,运动跟踪器就是服务器.如果运动跟踪器更新来⾃⼿机的数据,⼿机作为服务器.
BLE权限(BLE Permissions)
为了在应⽤中使⽤Bluetooth特性,必须要声明权限.你需要这个权限区执⾏任何蓝⽛通讯,例如请求连接,接收连接,传输数据.
如果你想要App应⽤初始化设备搜索或者⼿动操作蓝⽛设置,你必须声明BLUETOOTH_ADMIN权限.注意:如何要使⽤BLUETOOTH权限,⽐先声明BLUETOOTH权限.
在l⽂件中声明权限:
<us-permission android:name="android.permission.BLUETOOTH"/>
<us-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
如果你想要声明你的APP应⽤仅仅⽀持具有BLE功能的设备,请声明下⾯权限:
<us-feature android:name="android.hardware.bluetooth_le"android:required="true"/>
然⽽,如果想要你的APP对不⽀持BLE的设备也有效,必须引⼊该元素在manifest⽂件中,但是required=fal.在运⾏时可以通
过PackagerManager.hasSystemFeature()来判断BLE是否可⽤.
// U this check to determine whether BLE is supported on the device. Then
// you can lectively disable BLE-related features.
if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {        Toast.makeText(this,R.string.ble_not_supported,Toas  finish();
}
启动BLE(Setting up BLE)
在使⽤BLE通讯前,请确认你的APP是否⽀持BLE,并且要保证蓝⽛已打开(enable).注意:如果&>设定为fal,此处检查是必须的.
如果APP不⽀持BLE,那就不能使⽤BLE任何特性.如果⽀持BLE,但是没有打开蓝⽛,你可以请求在不退出应⽤打开蓝⽛.这样,蓝⽛就是通过BluetoothAdapter分2步启动.
1.获得BluetoothAdapter:
BluetoothAdapter在任何Bluetooth Activity中都是必备的.BluetoothAdapter代表了设备本⾝的适配器.整个系统有⼀个适配器,你的应⽤可以BluetoothAdapter和整个应⽤交互.下⾯代码显⽰了如何获取BluetoothAdapter
此⽅法使⽤getSystemService()来获得⼀个BluetoothMangager的实例, BluetoothManager实例能够⽤来获取⼀个
BluetoothAdapter的⼀个实例.在andriod4.3引⼊BluetoothManager.
// Initializes Bluetooth adapter.
final BluetoothManager bluetoothManager =(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = Adapter();
晕场
2.打开蓝⽛设备:
下⼀步,你必须保证Bluetooth是开启的.调⽤isEnable()可以检查当前蓝⽛是否开启.如果返回fal,表⽰蓝⽛为开启.下⾯代码⽤于检测蓝⽛是否开启,如果没有,会显⽰⼀个错误信息让⽤户去开启蓝⽛.设计岗位职责
private BluetoothAdapter mBluetoothAdapter;
...
// Ensures Bluetooth is available on the device and it is enabled. If not,
// displays a dialog requesting ur permission to enable Bluetooth.
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
搜索BLE设备(Finding BLE Device)
使⽤startLeScan()搜索BLE设备,此⽅法将BluetoothAdapter.LeScanCallback作为⼀个参数,你必须实现该回调接⼝,因为接⼝决定着扫描结果是怎么样返回的.扫描很耗电,应当遵守如下准则:
找到设备⽴即关掉扫描功能
不要反复扫描,并且设置扫描时间限制,先前可⽤的设备可能现在已经移出扫描范围,继续扫描可能耗⼲电池.
下⾯代码是如何开启和关闭扫描:
//Activity for scanning and displaying available BLE devices.
public class DeviceScanActivity extends ListActivity {
private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;
// Stops scanning after 10 conds.
private static final long SCAN_PERIOD = 10000;
...
private void scanLeDevice(final boolean enable) {
if (enable) {
清明节是几月初几// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = fal;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, SCAN_PERIOD);
mScanning = true;
mBluetoothAdapter.startLeScan(mLeScanCallback);
} el {
mScanning = fal;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
养成学习好习惯
...
}
...
}
如果你想扫描特定型号的外设,可⽤调⽤startLeScan(UUID[],BluetoothAdapter.LeScanCallback),需要提供你的APP⽀持的GATT
rvices的UUID对象数组.下⾯是BluetoothAdapter.LeScanCallback实现实例,⽤来传递BLE扫描结果.
武汉最低工资标准private LeDeviceListAdapter mLeDeviceListAdapter;
...
// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi,
byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mLeDeviceListAdapter.addDevice(device);
}
});
}
};
> 注意: 扫描传统蓝⽛设备和BLE蓝⽛设备不能同时进⾏,同⼀时间只能扫描传统蓝⽛设备或者BLE设备
连接GATT服务端(Connecting to a GATT Server)
和BLE设备交互第⼀步就是连接BLE设备,特别的, 是连接设备上的GATT服务端.连接BLE设备上的GATT服务端,要使⽤connectGatt()⽅法.这个⽅法需要三个参数: Context对象,autoConnect(⼀旦BLE可⽤时是否⽴即连接BLE设备),以及BluetoothGattCallback接⼝.
mBluetoothGatt = tGatt(this, fal, mGattCallback);

本文发布于:2023-05-23 15:01:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/925219.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设备   扫描   连接   属性   例如   是否   开启
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图