UWB 与附近设备:距离、方向、关联与传输(Codename One)
来源:dev.to — 2026-09-06
📋 概述
作者介绍 Codename One 通过 PR #5589 暴露的超宽带(UWB)附近设备能力:蓝牙只能告诉你设备「大概在附近」,而 UWB 能告诉你「它在那个人手里往右转 18 度、距离 42 厘米,直到方向消失」。那个「直到方向消失」正是 API 契约的一部分——附近硬件给的是不完整的答案,权限随操作系统版本变化,且 Apple 的本地传输发现不了 Google 的。API 拆成三个回答三个不同问题的包:ranging(对端多远、朝哪个方向)、companion(用户把哪个配件与本 App 关联)、transport(两个附近实例如何交换负载),并刻意通过包名导入来做功能 opt-in。
🔑 核心要点
- UWB 靠射频飞行时间测量,实用目标是约十厘米级测距,而蓝牙信号强度估计会因手遮手机摆动数米——但 UWB 本身不能发现或识别对端,需要先经已共享信道(通常是 BLE GATT 特征)交换 ranging token
- 每个 RangingUpdate 除时间戳外全部可选:对端在身后可只报距离不报方向、在射频边缘两者都可短暂消失,因此必须分别检查 hasDistance() 与 hasDirection()
- 方位角随平台而异:Android 报 -90 到 90 度所以仅凭方位分不出身前身后,iOS 返回方向向量可推导 -180 到 180 度;一个会话只追踪一个对端,反映 Apple 的单 peer 限制
- com.package 导入就是 opt-in:只 import ranging 就不会收到 Nearby Connections/MultipeerConnectivity/本地网络提示等权限;用 isSupported() 能力查询而非平台硬编码判断
- 诚实的边界:NearbyTransport 的 Android(Google Nearby Connections)与 Apple(MultipeerConnectivity)两套原生栈不共享线协议,Android 手机发现不了 iPhone——跨生态要回退 BLE L2CAP 或 Bonjour;模拟器只给 LOCAL_ONLY 模拟态无法证明天线与真实设备权限
💡 金句
超宽带能告诉你那台设备在 42 厘米外、偏右 18 度——直到拿着它的人转过身,方向便消失了;而这个「消失」恰恰写进了 API 契约里。
👍 0
👎 0
← 返回 dev.to 首页