你见过苹果手表解锁Mac吗?这个想法很棒,但我不想要智能手表,因为我已经有一部具有类似功能的手机 AFAIK。 另外,我最近从OSX转移到Linux:)
我不知道Apple Watch如何解锁Mac。但我知道从用户体验的角度来看什么是可取的:
- 需要比我输入密码更快地解锁
- 应该在没有wifi/4G的情况下工作
- 应该是节能的
无线射频识别
RFID会很好,但我知道没有嵌入RFID阅读器的笔记本电脑。
基于蓝牙的接近检测
经典蓝牙的挑战是需要不断扫描附近的设备来测量信号强度 (RSSI(,我们可以从中推断出接近度。
不幸的是,发现跳跃并收听 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可以做到这一点吗?有什么例子的指针吗?
是的,这应该是低功耗蓝牙(有一些警告(可以实现的,如下所示:-
- 您需要一个BlueZ脚本/C程序来不断扫描您的Android设备。
- 您需要始终打开手机的蓝牙。
- 您需要至少配对一次,以便您的 Linux 机器识别您的 Android 设备的可变蓝牙地址(请参阅参考链接(。
应该编写BlueZ脚本程序,以便一旦Linux系统进入待机状态,该程序就会作为守护程序或后台进程启动,该进程刚刚开始扫描Android设备并读取其RSSI值。如果找到您的设备并且 RSSI 值指示它在范围内,则此过程将向 Linux 操作系统发出唤醒信号。
注意事项:-
- BLE不是定位/定位的理想选择;您可能会检测到 如果你在几米远的地方,但要得到一个会很困难 精度为几厘米。
- 您的 BlueZ 脚本需要 不断作为守护程序或后台进程运行,所以如果它是 当设备进入睡眠状态时,不知何故被杀死或处于非活动状态,这 行不通。
- 手机上的蓝牙应始终打开,这 应该不会对电池寿命产生很大影响,但也不会 推荐。
为您提供的一些资源:-
- 在 Linux 中在后台运行蓝牙应用程序
- 低功耗蓝牙:入门
- 低功耗蓝牙入门
- 蓝牙简介
- Linux 中的蓝牙 LE 信号强度
- 是否应该与蓝牙 LE 设备建立联系
- 如何在 Linux 中检测系统是否处于待机 状态
- 安卓蓝牙低功耗概述
- 在 Linux 命令行中使用低功耗蓝牙
这不会是一个直截了当的过程,你可能不得不一路尝试并失败,但这将是一次学习经历,你最终应该能够实现你想要的。
我希望这有所帮助。