你见过用 Apple Watch 解锁 Mac 吗?这个想法很棒,但我不想要智能 watch ,因为我已经有一部具有类似功能的手机 AFAIK。 另外,我最近从 OSX 转向了 Linux :)
我不知道 Apple Watch 是如何设法解锁 Mac 的。但我知道从用户体验的角度来看什么是可取的:
- 需要比我输入密码更快的解锁
- 应该在没有 wifi/4G 的情况下工作
- 应该是节能的
无线射频识别
RFID 会很好,但我所知道的笔记本电脑中没有嵌入 RFID 阅读器的。
基于蓝牙的接近检测
经典蓝牙的挑战是需要不断扫描附近的设备以测量信号强度 (RSSI),我们可以从中推断距离。
不幸的是,发现跳跃并收听了 40 个 channel 。无论如何,当屏幕关闭一段时间后,电话就会停止广播。这还不够好。我知道,因为我尝试过:
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 Activity
这种方式快速、节能,并且不需要网络协议(protocol),只需要一些罕见的BT传输。
但这对蓝牙 LE 来说可能吗?有任何指向示例的指针吗?
最佳答案
是的,这应该可以通过低功耗蓝牙(有一些注意事项)实现,如下所示:-
- 您需要一个 BlueZ 脚本/C 程序来持续扫描您的 Android 设备。
- 您需要始终打开手机的蓝牙。
- 您将需要至少配对一次,以便您的 Linux 机器能够识别您的 Android 设备的可变蓝牙地址(参见引用链接)。
BlueZ 脚本程序应该这样写,一旦您的 Linux 系统进入待机状态,该程序就会作为守护进程或后台进程启动,开始扫描 Android 设备并读取它们的 RSSI 值。如果找到您的设备并且 RSSI 值表明它在范围内,则此过程将向 Linux 操作系统发出唤醒信号。
注意事项:-
- BLE 不适合定位/定位;你可能会发现 如果你在几米之外,但要获得一个 几厘米的精度。
- 您的 BlueZ 脚本需要 作为守护进程或后台进程不断运行,所以如果它是 当设备进入休眠状态时以某种方式被杀死或处于非 Activity 状态,这 不管用。
- 手机上的蓝牙应始终开启,这样 应该不会对电池生命周期产生很大影响,但也不会 推荐。
一些资源给你:-
- Running Bluetooth applications in the background in Linux
- Bluetooth Low Energy: A Primer
- Getting Started with Bluetooth Low Energy
- Introduction to BLE
- Bluetooth LE Signal Strength in Linux
- Should One Create a Bond with a Bluetooth LE Device
- How to Detect Whether System is Going to Standby in Linux
- Android Bluetooth Low Energy Overview
- Using Bluetooth Low Energy in Linux Command Line
这不会是一个直截了当的过程,您可能不得不一路尝试并失败,但这将是一次学习经历,您最终应该能够实现自己想要的。
希望对您有所帮助。
关于android - 使用低功耗蓝牙解锁 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59920188/