如需要了解更多蓝牙相关知识,请点击下方连接
https://blog.csdn.net/weixin_47456647/article/details/155188246?spm=1011.2415.3001.5331
谷歌在其开发者大会 Google I/O 上,于 5 月 17 日正式发布了 Android O,目前该系统已面向普通用户开放。和以往一样,谷歌先推出了开发者预览版,让开发者提前了解新一代 Android 系统的情况。下面我们看看 Android O 对蓝牙 ® 开发者意味着什么。
首先,我想先说明 Android 版本的命名规则:谷歌用字母表中的字母为每个新版本命名,按字母顺序依次分配。这些字母通常对应一种甜点或糖果的名称,同时也有传统的版本号。例如:
- Android 4.3,代号 Jelly Bean( Jelly Bean 是软糖)
- Android 4.4,代号 KitKat(KitKat 是奇巧巧克力)
- Android 5.0,代号 Lollipop(Lollipop 是棒棒糖)
- Android 6.0,代号 Marshmallow(Marshmallow 是棉花糖)
- Android 7.0,代号 Nougat(Nougat 是牛轧糖)
- Android 8.0,传闻代号是 Oreo(Oreo 是奥利奥)
虽然 Android 的版本命名很有趣,但可能让你意外的是:本文的目的不是讨论甜点、饼干之类的名称。实际上,我是想让大家了解新一代 Android 系统及其 API,以及其中包含的新蓝牙特性。
从最新的 Android 开发者参考指南可以看到,蓝牙相关的变更主要分为两类:对蓝牙 ® 核心规范 5.0 部分功能的支持,以及蓝牙音频相关的一些调整。
蓝牙 ® 核心规范 5.0 支持
蓝牙 ® 核心规范 5.0 于去年 12 月发布,包含三大核心特性:4 倍传输距离、2 倍传输速率、8 倍 ADV 数据包长度。Android O 的 API 中包含了与蓝牙 ® 核心规范 5.0 相关的变更。
例如:a. setPreferredPhy方法
void setPreferredPhy(int txPhy, int rxPhy, int phyOptions)
通过setPreferredPhy方法,你可以为 Android 设备配置蓝牙低功耗(BLE)的物理层(PHY)。蓝牙 ® 核心规范 5.0 的物理层包含三种选项:1M PHY、2M PHY 和编码 PHY。
setPreferredPhy的参数txPhy和rxPhy定义如下:
PHY_LE_1M_MASK:蓝牙 ® 核心规范 5.0 的 1M PHY,兼容蓝牙核心规范 4.0、4.1、4.2 和 5.0PHY_LE_2M_MASK:蓝牙 ® 核心规范 5.0 的 2M PHYPHY_LE_CODED_MASK:蓝牙 ® 核心规范 5.0 的编码 PHY
setPreferredPhy的参数phyOptions支持以下取值:
setPreferredPhy支持选择并配置蓝牙 ® 核心规范 5.0 的长距离、高速率特性,或兼容蓝牙 ® 核心规范 4.x 与 5.0 设备的 LE 1M PHY。
PHY_LE_1M_MASK |
PHY_LE_2M_MASK |
PHY_LE_CODED_MASK |
|
|---|---|---|---|
PHY_OPTION_NO_PREFERRED |
兼容 4.0、4.1、4.2、5.0 | 高速率 | |
PHY_OPTION_S2 |
长距离(2 倍) | ||
PHY_OPTION_S8 |
长距离(4 倍) |
但这里需要强调一点:长距离和高速率特性仅当 Android 设备硬件支持蓝牙 ® 核心规范 5.0 时才可用。
若想了解 Android O 中长距离和高速率蓝牙 API 的更多细节,请参考:https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html
b. 广播扩展(ADV Extension)
在 Android O 中,与记录长度相关的ScanRecord.getBytes()方法也有一些变更。当 Android 应用启动蓝牙低功耗扫描时,代码中会调用startScan(scanCallback);ScanCallback是一个实现了回调函数的对象,在接收到广播包时会被触发。回调函数的调用会传入一个ScanRecord对象作为参数,而scanRecord.getBytes()方法会返回扫描记录(即广播包)的原始字节数据。
Android O 对scanRecord.getBytes()方法返回的数据长度做了如下变更:该方法不再对广播包的字节数做任何假设。因此,应用不应依赖返回数组的长度存在特定的最小值或最大值。蓝牙 ® 核心规范 5.0 设备返回的数据长度可能会超过之前约 60 字节的上限。注意:如果远端设备未提供扫描响应,返回的数据可能不足 60 字节。
同时,Android O 对蓝牙 ® 核心规范 5.0 的支持还包含其他与广播扩展相关的特性,例如startAdvertisingSet方法:
void startAdvertisingSet(AdvertisingSetParameters parameters,
AdvertiseData advertiseData,
AdvertiseData scanResponse,
PeriodicAdvertisingParameters periodicParameters,
AdvertiseData periodicData,
int duration,
int maxExtendedAdvertisingEvents,
AdvertisingSetCallback callback)
广播集是蓝牙 ® 核心规范 5.0 的特性之一,它允许配置多组独立的广播参数(包括广播数据载荷和时序参数),并将这些参数告知蓝牙控制器。
从startAdvertisingSet方法可以看到,我们还支持蓝牙 ® 核心规范 5.0 的新特性 ------ 周期性广播和扩展广播。你可以在 Android 开发者参考指南中找到更多信息:https://developer.android.com/reference/android/bluetooth/le/BluetoothLeAdvertiser.html
蓝牙音频
Android O 还新增了对索尼 LDAC 技术的支持。LDAC 是索尼开发的一种音频编码技术,可通过蓝牙 ® 连接传输高解析度音频内容。该技术能将蓝牙音频信号的传输吞吐量提升至最高 990kbps。在支持 LDAC 后,开启 LDAC 功能的耳机和音箱可以与 Android O 设备连接,提供高品质的音频体验。
LDAC 有三种传输速率选项:
- 990kbps,音质优先模式
- 660kbps,标准模式
- 330kbps,连接优先模式
看起来 Android O 也支持高通的 aptX 和 aptX-HD 技术,这为开发者通过蓝牙连接使用音频功能提供了丰富的选择。
设备部署
目前,Android O 的开发者预览版仍处于测试阶段,可在部分 Nexus 和 Pixel 设备上进行测试,例如 Nexus 5X、6P、Player,以及 Pixel、Pixel XL、Pixel C 设备。
是时候拥抱蓝牙 ® 核心规范 5.0 了
开发者们,别犹豫了 ------ 是时候开始开发利用蓝牙 ® 核心规范 5.0 能力的应用了!