你是否看过苹果手表解锁Mac的场景?这个想法很棒,但我不需要智能手表,因为我的手机已经具备了类似的功能,据我所知。另外,最近我从OSX换成了Linux :)
我不知道苹果手表是如何解锁Mac的。但从用户体验的角度来看,以下几点是可取的:
1. 需要比我输入密码更快地解锁 2. 在没有wifi/4G的情况下也应该能够工作 3. 应该有较低的耗电量
我在研究BTLE(Bluetooth Low Energy),但我有些难以理解以下内容:
在Linux上是否有一种方法,可以建立一个单独的低功耗蓝牙连接到Android手机上,我们可以让它一直处于休眠状态,并且仅在需要时才使用它来唤醒手机并发送一些数据包(以便我们可以测量其RSSI功率并推断距离)。
也就是说,我们将传输限制为以下这些罕见的情况:
- 检查用户是否不在场,如果我们检测到1分钟内不活动的鼠标和键盘 - 当GDM处于活动状态时检查用户是否足够接近 - 否则完全没有BT活动
这种方法快速、节能,不需要网络协议,只需要一些罕见的BT传输。但是对于Bluetooth LE而言,是否可能实现这一点呢?是否有指向示例的提示?
注:BTLE即蓝牙低能耗技术。
我不知道苹果手表是如何解锁Mac的。但从用户体验的角度来看,以下几点是可取的:
1. 需要比我输入密码更快地解锁 2. 在没有wifi/4G的情况下也应该能够工作 3. 应该有较低的耗电量
射频识别技术(RFID)
使用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(Bluetooth Low Energy),但我有些难以理解以下内容:
在Linux上是否有一种方法,可以建立一个单独的低功耗蓝牙连接到Android手机上,我们可以让它一直处于休眠状态,并且仅在需要时才使用它来唤醒手机并发送一些数据包(以便我们可以测量其RSSI功率并推断距离)。
也就是说,我们将传输限制为以下这些罕见的情况:
- 检查用户是否不在场,如果我们检测到1分钟内不活动的鼠标和键盘 - 当GDM处于活动状态时检查用户是否足够接近 - 否则完全没有BT活动
这种方法快速、节能,不需要网络协议,只需要一些罕见的BT传输。但是对于Bluetooth LE而言,是否可能实现这一点呢?是否有指向示例的提示?
注:BTLE即蓝牙低能耗技术。