发现没有我已经配对的设备的蓝牙设备

问题描述

我想在没有我已经配对的设备的情况下发现蓝牙设备。但是我的 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