2016-10-30 120 views
2

我使用python import bluetooth的蓝牙模块,我相信它是PyBluez软件包。我能够通过bluetooth.BluetoothSocket类进行连接,发送和接收,但是当涉及到连接状态时,我的应用程序完全失效。蟒蛇蓝牙 - 检查连接状态

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

通常有很多关于这个简单的事情,所以如果这是重复的道歉。我已经多次搜索这个网站的答案,但没有发现任何具体的python。

回答

1

如果你的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

如果您正在使用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