建站系统做的网站百度可以搜索到吗,北京影视制作公司,自己做网站优化,凡科系统官网安卓手机APP开发__超宽带(UWB)通信
目录
概述
控制方/发起方与控制方/响应方
参数范围
后台测距
STS 配置
步骤
使用限制
代码示例
示例应用
UWB 范围
RxJava3 支持
生态系统支持
支持 UWB 的移动设备
第三方 SDK 概述
注意 #xff1a;UWB 目前仅支持 Jetpac…安卓手机APP开发__超宽带(UWB)通信
目录
概述
控制方/发起方与控制方/响应方
参数范围
后台测距
STS 配置
步骤
使用限制
代码示例
示例应用
UWB 范围
RxJava3 支持
生态系统支持
支持 UWB 的移动设备
第三方 SDK 概述
注意 UWB 目前仅支持 Jetpack。
超宽带通信是一种无线技术侧重于设备间的精确测距将位置测量精确到 10 厘米。 这种无线电技术可以使用低功率密度进行短距离测量并在很大一部分无线电频谱 上执行高带宽信号。UWB 的带宽大于 500 MHz或超过带宽的 20%。
控制方/发起方与控制方/响应方
UWB 通信发生在两个设备之间一个设备是控制器另一个是受控设备。控制器会 确定两台设备将共享的复杂频道 (UwbComplexChannel)并且是发起方而受控方 是响应方。
一个控制器可以处理多个控制方但一个控制方只能订阅一个控制器。控制器/发起 方配置和控制方/响应方配置均受支持。
参数范围
控制器和被控制者需要相互识别并传达测距参数以开始测距。这种交换交由应用 使用他们选择的安全带外 (OOB) 机制来实现例如蓝牙低功耗 (BLE)。
范围参数包括本地地址、复杂渠道和会话密钥等等。请注意在测距会话结束后 这些参数可能会旋转或以其他方式发生变化并且需要重新通信以重启测距。
后台测距
如果设备支持在后台运行的应用可以启动 UWB 测距会话。如需查看设备功能 请参阅 RangingCapabilities。
应用在后台运行时不会收到测距报告当应用进入前台时会收到测距报告。
STS 配置
应用或服务使用加扰时间戳序列 (STS) 为每个会话预配会话密钥。预配的 STS 比静态 STS 配置更安全。所有搭载 Android 14 或更高版本且支持 UWB 的设备 都支持预配的 STS。
威胁类别 静态 STS 预配的 STS 空气被动观测器 已缓解 已缓解 空气信号放大 已缓解 已缓解 Air重放/中继攻击 易受感染 已缓解
对于预配的 STS 在支持所配置的 STS 的 RangingParameters 中使用 uwbConfigType。 在 sessionKeyInfo 字段中提供 16 字节的密钥。
对于静态 STS 在支持静态 STS 的 RangingParameters 中使用 uwbConfigType。 在 sessionKeyInfo 字段中提供 8 字节的密钥。
步骤
如需使用 UWB API请按以下步骤操作 确保 Android 设备搭载的是 Android 12 或更高版本并使用 PackageManager#hasSystemFeature(android.hardware.uwb) 支持 UWB。 如果要针对 IoT 设备测距请确保这些设备符合 FiRa MAC 1.3 标准。 使用您选择的 OOB 机制例如 BluetoothLeScanner发现支持 UWB 的对等设备。 使用您选择的安全 OOB 机制例如 BluetoothGatt交换测距参数。 如果用户想要停止会话请取消会话的范围。
使用限制
UWB API 的使用存在以下限制 启动新的 UWB 测距会话的应用必须是前台应用或服务除非支持后台测距如前所述。 当应用转到后台当会话正在进行时时应用可能不会再接收测距报告。 不过UWB 会话将继续在较低层级维护。当应用返回前台时测距报告将恢复。
代码示例
示例应用
如需查看有关如何使用 UWB Jetpack 库的端到端示例请参阅 GitHub 上的示 例应用。此示例应用介绍了如何验证 Android 设备上的 UWB 兼容性、使用 OOB 机制启用发现流程以及如何在两台支持 UWB 的设备之间设置 UWB 范围。该示例还介绍了设备控制和媒体共享用例。
UWB 范围
以下代码示例可启动和终止受控方的 UWB 测距
// The coroutineScope responsible for handling uwb ranging.
// This will be initialized when startRanging is called.
var job: Job?// A code snippet that initiates uwb ranging for a Controlee.
suspend fun startRanging() {// Get the ranging parameter of a partnering Controller using an OOB mechanism of choice.val partnerAddress : PairUwbAddress, UwbComplexChannel listenForPartnersAddress()// Create the ranging parameters.val partnerParameters RangingParameters(uwbConfigType UwbRangingParameters.UWB_CONFIG_ID_1,// SessionKeyInfo is used to encrypt the ranging session.sessionKeyInfo null,complexChannel partnerAddress.second,peerDevices listOf(UwbDevice.createForAddress(partnerAddress.first)),updateRateType UwbRangingParameters.RANGING_UPDATE_RATE_AUTOMATIC)// Initiate a session that will be valid for a single ranging session.val clientSession uwbManager.clientSessionScope()// Share the localAddress of the current session to the partner device.broadcastMyParameters(clientSession.localAddress)val sessionFlow clientSession.prepareSession(partnerParameters)// Start a coroutine scope that initiates ranging.CoroutineScope(Dispatchers.Main.immediate).launch {sessionFlow.collect {when(it) {is RangingResultPosition - doSomethingWithPosition(it.position)is RangingResultPeerDisconnected - peerDisconnected(it)}}}
}// A code snippet that cancels uwb ranging.
fun cancelRanging() {// Canceling the CoroutineScope will stop the ranging.job?.let {it.cancel()}
}
RxJava3 支持
现在可以支持 Rxjava3以帮助实现与 Java 客户端的互操作性。此库提供了 一种方法来获取可观察或可流形式的测距结果以及将 UwbClientSessionScope 检索为单个对象。
private final UwbManager uwbManager;// Retrieve uwbManager.clientSessionScope as a Single object
SingleUwbClientSessionScope clientSessionScopeSingle UwbManagerRx.clientSessionScopeSingle(uwbManager);
UwbClientSessionScope uwbClientSessionScope clientSessionScopeSingle.blockingGet();// Retrieve uwbClientSessionScope.prepareSession Flow as an Observable object
ObservableRangingResult rangingResultObservable UwbClientSessionScopeRx.rangingResultsObservable(clientSessionScope,rangingParameters);// Consume ranging results from Observable
rangingResultObservable.subscribe(rangingResult - doSomethingWithRangingResult(result), // onNext(error) - doSomethingWithError(error), // onError() - doSomethingOnResultEventsCompleted(), //onCompleted
);
// Unsubscribe
rangingResultObservable.unsubscribe();// Retrieve uwbClientSessionScope.prepareSession Flow as a Flowable object
FlowableRangingResult rangingResultFlowable UwbClientSessionScopeRx.rangingResultsFlowable(clientSessionScope,rangingParameters);// Consume ranging results from Flowable using Disposable
Disposable disposable rangingResultFlowable.delay(1, TimeUnit.SECONDS).subscribeWith(new DisposableSubscriberRangingResult () {Override public void onStart() {request(1);}Override public void onNext(RangingResult rangingResult) {doSomethingWithRangingResult(rangingResult);request(1);}Override public void onError(Throwable t) {t.printStackTrace();}Override public void onComplete() {doSomethingOnEventsCompleted();}});// Stop subscription
disposable.dispose();
生态系统支持
以下是受支持的合作伙伴设备和第三方 SDK。
支持 UWB 的移动设备
截至 2024 年 3 月这些设备支持 Android UWB Jetpack 库 供应商 设备型号 Google Pixel 6 Pro、7 Pro、8 Pro、 Fold、平板电脑 三星 Galaxy Note 20、S21、S22、S23、S24 Z Fold 2、3、4、5
第三方 SDK
截至 2023 年 4 月这些合作伙伴解决方案与当前的 Jetpack 库兼容。 Estimote UWB 开发套件。 移动知识 MK UWB Kit 移动版本 2.0。
已知问题MAC 地址和静态 STS 供应商 ID 字段的字节顺序颠倒
在 Android 13 及更低版本中Android UWB 堆栈错误地反转以下字段的字节顺序 设备 MAC 地址 目标 MAC 地址 静态 STS 供应商 ID
之所以发生字节顺序逆转是因为 Android 堆栈将这些字段视为值而不是数组。 我们正在与 FiRa 合作更新 UCI 规范 (CR-1112)以明确声明这些字段应被视为数组。
此问题将通过 2320XXXX 版本中的 GMS Core 更新来修复。从那时起为了与 Android 设备兼容IoT 供应商需要修改您的实现以免反转这些字段的字节顺序。