HarmonyOS Next鸿蒙中集成蓝牙
HarmonyOS 鸿蒙集成蓝牙
蓝牙的配对和绑定基础知识:
Paring(配对)和Bonding(绑定)是实现蓝牙射频通信安全的一种机制,有两点需要注意:
Paring/bonding实现的是蓝牙链路层的安全,对应用层来说是完全透明的。也就是说,不管有没有paring/bonding,应用层数据的收发方式都是一样的,不会因为加了paring/bonding而使应用层数据传输需要做某些特殊处理。 安全有两种选项:加密或签名。目前绝大部分应用都是选择加密 实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以自己在应用层去实现相同的安全功能。从功能上来说是没有太大区别的,不同的是应用层安全自己实现的话,需要自己选择加密算法、密钥生成、密钥交换等。如果不是这方面的专家,很有可能会有安全漏洞。而蓝牙的paring/bonding则把上述过程标准化,放在了蓝牙协议栈里。并且其安全性得到了充分的评估,用户可以“无感”使用安全的蓝牙通信。
paring/bonding是蓝牙sercurity manager(SM)的一部分,SM定义了蓝牙通信的安全架构,里面涉及安全架构、密码工具箱、paring协议等。其中paring协议是关键,所以经常把paring和SM二者等价。
2.配对 配对是找到并确定需要和自己通信的设备,也就是身份确定。接着是安全密钥共享,而这一过程仅仅是由启动加密到得到短期密钥(STK)为止。其包括配对能力交换、设备认证、密钥(固定128bit)生成、连接加密以及机密信息分布等过程。配对的目的有三个:加密连接、认证设备、生成密钥。
区别于传统蓝牙的配对过程,BLE的配对过程发生在连接过程之后。
和经典蓝牙一样,协议为处于连接状态的BLE设备,定义了两种Link Layer角色:Master和Slave。Master是连接的发起方,可以决定和连接有关的参数。Slave是连接的接收方,可以请求连接参数,但无法决定。
在SM(Security Manager)的规范中,配对时指"Master和Slave通过协商确立用于加(解)密的Key的过程",主要由三个阶段组成:
第一阶段(必须):配对特征交换。称作“Pairing Feature Exchange”,用于交换双方有关鉴权的需求(authentication requirements),以及双方具有怎样的人机交互能力(IO Capabilities)。
第二阶段(必须):短期密钥(STK)生成。通过SMP协议进行实际的配对操作,根据阶段一“Feature Exchange”的结果,有两种配对方法可选:LE legacy pairing和LE Secure Connections
第三阶段(可选):传输特定密钥分配。该阶段时可选的,经过阶段一和阶段二之后,双反已经产生了加密key。因此可以建立加密的连接。加密连接建立后,可以互传一些私密的信息,例如Encryption Information、Identity Information、Identity Address Information等。
代码示例:
1、蓝牙权限授权
PermissionUtil.requestPermissions('ohos.permission.ACCESS_BLUETOOTH').then((result) => {
ToastUtil.showToast(`访问蓝牙:${result}`)
})
{
"name": 'ohos.permission.USE_BLUETOOTH',
"reason": '$string:permission_reason_use_bluetooth'
},
{
"name": 'ohos.permission.ACCESS_BLUETOOTH',
"reason": '$string:permission_reason_discovery_bluetooth',
"usedScene": {"when": "always"}
},
{
"name": 'ohos.permission.DISCOVER_BLUETOOTH',
"reason": '$string:permission_reason_discovery_bluetooth'
},
扫描蓝牙
startBLEScanInner(): boolean {
try {
this.mAvailableDevices = [];
if (this.mConnectBluetoothDevice.connectionState === ConnectionState.STATE_CONNECTED) {
this.mAvailableDevices.push(this.mConnectBluetoothDevice);
}
AppStorage.setOrCreate('availableDevices', this.mAvailableDevices);
// ble.startBLEScan([{ serviceUuid: BleConstants.UUID_SERVICE_HEART_RATE }]);
ble.startBLEScan(null);
Log.showInfo(TAG, `startBLEScanInner: scan ble start`);
this.mTimeoutID = setTimeout(() => {
Log.showInfo(TAG, `startBLEScanInner: scan ble finished`);
this.stopBLEScan();
}, 30000);
return true;
} catch (err) {
Log.showError(TAG, `startBLEScanInner: err = ${err}`);
}
return false;
}
connectInner(gattClientDevice: ble.GattClientDevice): boolean {
Log.showInfo(TAG, `connectInner`);
try {
if (!gattClientDevice) {
Log.showWarn(TAG, `connectInner: mGattClientDevice is null`);
return false;
}
this.onBLEConnectionStateChange();
this.onBLECharacteristicChange();
gattClientDevice.connect();
this.mConnectBluetoothDevice.connectionState = ConnectionState.STATE_CONNECTING;
AppStorage.setOrCreate('connectBluetoothDevice', this.mConnectBluetoothDevice);
AppStorage.setOrCreate('connectBluetoothDeviceId', this.mConnectBluetoothDevice.deviceId);
return true;
} catch (err) {
Log.showError(TAG, `connectInner: err = ${err}`);
}
return false;
}
更多关于HarmonyOS Next鸿蒙中集成蓝牙的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS Next鸿蒙中集成蓝牙的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙蓝牙初体验
HarmonyOS(鸿蒙)在蓝牙功能上的表现令人眼前一亮。系统内置的蓝牙模块采用了全新的架构设计,优化了连接稳定性和数据传输效率。在实际使用中,蓝牙设备的配对速度显著提升,几乎做到了即开即连,大大减少了用户的等待时间。
鸿蒙蓝牙还支持更多的设备类型和协议,使得跨品牌、跨设备的互联互通变得更加便捷。无论是连接蓝牙耳机、音箱等音频设备,还是与智能手表、健康监测器等智能穿戴设备同步数据,都能实现无缝对接,提升了整体的用户体验。
在蓝牙功耗方面,鸿蒙系统也进行了深度优化。通过智能识别设备的连接状态和使用场景,系统能够动态调整蓝牙的工作模式,从而在保证连接稳定性的同时,最大限度地降低功耗,延长设备的续航时间。
此外,鸿蒙蓝牙还支持蓝牙低功耗(BLE)技术,使得蓝牙设备在保持连接的同时,能够显著降低能耗,这对于需要长时间待机的智能设备来说尤为重要。
总的来说,HarmonyOS 鸿蒙在蓝牙功能上的表现可圈可点,无论是连接速度、稳定性、兼容性还是功耗控制,都达到了较高的水准。相信随着系统的不断迭代和优化,鸿蒙蓝牙将会为用户带来更加出色的使用体验。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html