问题中的代码片段是扫描新设备,而不是报告连接的设备。
PyBluez 库未在积极开发中,因此我倾向于避免使用它。
BlueZ(Linux 上的蓝牙堆栈)通过 D-Bus 提供了一组 API,可通过 Python 使用 D-Bus 绑定进行访问。在大多数情况下,我更喜欢pydbus。
BlueZ API 记录在:
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/device-api.txt
作为如何在 Python3 中实现此功能的示例:
import pydbus
bus = pydbus.SystemBus()
adapter = bus.get('org.bluez', '/org/bluez/hci0')
mngr = bus.get('org.bluez', '/')
def list_connected_devices():
mngd_objs = mngr.GetManagedObjects()
for path in mngd_objs:
con_state = mngd_objs[path].get('org.bluez.Device1', {}).get('Connected', False)
if con_state:
addr = mngd_objs[path].get('org.bluez.Device1', {}).get('Address')
name = mngd_objs[path].get('org.bluez.Device1', {}).get('Name')
print(f'Device {name} [{addr}] is connected')
if __name__ == '__main__':
list_connected_devices()