【发布时间】:2020-05-12 04:22:47
【问题描述】:
你见过苹果手表解锁 Mac 吗?这个想法很棒,但我不想要智能手表,因为我已经有一部具有类似功能的手机 AFAIK。 另外,我最近从 OSX 搬到了 Linux :)
我不知道 Apple Watch 是如何解锁 Mac 的。但我知道从用户体验的角度来看什么是可取的:
- 需要比我输入密码更快地解锁
- 应该在没有 wifi/4G 的情况下工作
- 应该是省电的
RFID
RFID 会很好,但据我所知没有笔记本电脑嵌入 RFID 阅读器。
基于蓝牙的接近检测
经典蓝牙面临的挑战是需要不断扫描附近的设备以测量信号强度 (RSSI),从而推断距离。
不幸的是,discovery 跳过并收听了 40 个频道。无论如何,当屏幕关闭一段时间后,手机就会停止广播。这还不够好。我知道是因为我尝试过:
import collection.JavaConverters._
import tinyb._
object Listener extends App {
var running = true
val BT_ADDR = sys.env.getOrElse("BT_ADDR", "XX:XX:XX:XX:XX:XX")
val BT_RSSI_DBM_THRESHOLD = Integer.parseInt(sys.env.getOrElse("BT_RSSI_DBM_THRESHOLD", "-65")).toShort
val manager = BluetoothManager.getBluetoothManager
val lock = new Object
while (true) {
manager.getAdapters.forEach(a => {
a.setRssiDiscoveryFilter(BT_RSSI_DBM_THRESHOLD)
a.removeDevices()
})
System.err.println("scanning for " + BT_ADDR + " at minimum " + BT_RSSI_DBM_THRESHOLD + " dBm RSSI...")
manager.startNearbyDiscovery(
(device: BluetoothDevice) => {
if (BT_ADDR.equals(device.getAddress)) {
onProximity(device)
manager.stopNearbyDiscovery()
lock.synchronized(lock.notify())
}
else println(device.getName)
}
, 1000
, false
)
lock.synchronized(lock.wait())
}
}
我正在查看 BTLE(蓝牙低功耗),但我很难理解以下内容:
有没有办法从Linux建立到Android手机的单个低功耗蓝牙连接,我们可以一直保持休眠状态,并用它来唤醒手机并让它传输一些数据包(这样我们就可以测量它的RSSI 功率和推断接近度)按需,仅在严格需要时。
即我们会将传输限制在这些极少数情况下:
- 如果我们检测到鼠标和键盘闲置 1 分钟,则检查用户何时离开,
- 在 GDM 处于活动状态时检查用户是否足够近
- 除此之外没有任何 BT 活动
这种方式快速、节能,不需要网络协议,只需要一些少见的BT传输。
但是,蓝牙 LE 可以做到这一点吗?任何指向示例的指针?
【问题讨论】:
标签: android bluetooth bluetooth-lowenergy bluez proximity