问题描述
我想在没有我已经配对的设备的情况下发现蓝牙设备。但是我的 python 脚本显示了打开的蓝牙设备+我配对的设备。如何仅过滤已开启的设备并忽略 PC 中的配对设备而不删除它们。
这是我的剧本
import bluetooth
def search():
devices = bluetooth.discover_devices(duration=1,lookup_names = True)
return devices
if __name__=="__main__":
while True:
results = search()
if (results!=None):
for addr,name in results:
print ("{0}".format(name))
print ("{0}".format(addr))
解决方法
我认为您无法通过 pybluez API 执行此操作,它甚至还没有处于积极开发阶段。如果我们查看 API,您可以将 flush_cache
设置为 False
以不查看以前发现的设备。但它再次显示配对的设备。
def discover_devices (duration=8,flush_cache=True,lookup_names=False,lookup_class=False,device_id=-1,iac=IAC_GIAC):
但也在下面,我看到了:
try:
results = _bt.hci_inquiry (sock,duration=duration,lookup_class=lookup_class,device_id=device_id,iac=iac)
您可能想尝试将其设置为 False
并试一试。
我不想通过 D-BUS API 发现配对设备似乎也是不可能的。如果我们看一下 adapter-api.txt 有一个 void SetDiscoveryFilter(dict filter)
方法,但它没有做你想要的。
另一种解决方法是使用 DBUS API 来获取设备是否被发现的信息,如果未配对,则列出一些列表,然后您将获得一个不错的未配对设备列表。如果您的域是 Linux,您可能需要检查缓存在哪里 kept。