2016-10-30 119 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