python bluetooth - 检查连接状态

时间:2016-10-30 01:21:04

标签: python bluetooth pybluez

我正在使用python import bluetooth的蓝牙模块,我相信它是PyBluez包。我可以通过bluetooth.BluetoothSocket类连接,发送和接收,但是我的应用程序在连接状态方面完全失明。

我希望我的应用程序在设备断开连接时禁用某些功能,但似乎没有任何类型的BluetoothSocket.is_connected()方法。我希望它能在蓝牙状态发生时立即检测到它们的变化。

通常有关于这个简单事情的多个主题,所以如果这是重复的话,请道歉。我多次搜索这个网站的答案,但没有发现python特有的。

2 个答案:

答案 0 :(得分:2)

如果你的SO是linux,你可以使用hcitool,它会告诉你蓝牙设备的状态。

请在下面找到一个可以满足您需求的小型Python代码段。你需要知道你的蓝牙设备的MAC:

import subprocess as sp

stdoutdata = sp.getoutput("hcitool con")

if "XX:XX:XX:XX:XX:XX" in stdoutdata.split():
    print("Bluetooth device is connected")

希望这有帮助!

答案 1 :(得分:1)

如果您使用的是Linux,还可以使用BluetoothSocket的getpeername()方法检查设备是否仍然可用。此方法(继承自python的套接字类)返回套接字所连接的远程地址。

如果设备仍然可用:

>>>sock.getpeername()
('98:C3:32:81:64:DE', 1)

如果设备未连接:

>>>sock.getpeername()
Traceback (most recent call last):
    File "<string>", line 3, in getpeername
_bluetooth.error: (107, 'Transport endpoint is not connected')

因此,要测试套接字是否仍然连接到实际设备,您可以使用:

try:
    sock.getpeername()
    still_connected = True
except:
    still_connected = False