蓝牙 ® 开发者需了解的 Android O 相关要点

如需要了解更多蓝牙相关知识,请点击下方连接

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的参数txPhyrxPhy定义如下:

  • PHY_LE_1M_MASK:蓝牙 ® 核心规范 5.0 的 1M PHY,兼容蓝牙核心规范 4.0、4.1、4.2 和 5.0
  • PHY_LE_2M_MASK:蓝牙 ® 核心规范 5.0 的 2M PHY
  • PHY_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 能力的应用了!

相关推荐
用户693717500138414 小时前
25.Kotlin 空安全:Kotlin 的灵魂:可空性 (?) 与空安全
android·后端·kotlin
用户693717500138414 小时前
26.Kotlin 空安全:安全调用:安全调用运算符 (?.) 与 Elvis 运算符 (?:)
android·后端·kotlin
Lj2_jOker14 小时前
Window vscode 使用cmake编译jpeg-turbo for android
android·ide·vscode
守月满空山雪照窗14 小时前
手机&PC运行内存和存储介绍
android
李坤林14 小时前
Android 12 Choreographer 深度解析
android
limingade15 小时前
Android应用如何点击桌面图标开启悬浮窗后跳转到最近打开的应用
android·悬浮窗自动切换顶层应用·android静默跳转应用·安卓获取手机任务窗口列表·android代码切换应用·adb切换应用
开酒不喝车15 小时前
中间件AIDL HIDL区别总结
android·中间件
mit6.82415 小时前
Android HAL(硬件抽象层):内核到应用的完整实现
android
鹏多多15 小时前
Flutter自定义日历table_calendar完全指南+案例
android·前端·flutter