5

我正在使用 python 的蓝牙模块import bluetooth,我相信它是 PyBluez 包。我可以从 bluetooth.BluetoothSocket 类很好地连接、发送和接收,但是当涉及到连接状态时,我的应用程序完全是盲目的。

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

通常有多个关于这样简单的事情的主题,所以如果这是重复的,请道歉。我已经多次搜索该站点以寻找答案,但没有发现任何特定于 python 的内容。

4

2 回答 2

4

If your SO is linux, you could use the hcitool, which will tell you the status of your bluetooth devices.

Please find below a small Python snippet that can accomplish your need. You will need to know your bluetooth device's 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")

Hope this helps!

于 2017-03-25T19:12:17.577 回答
2

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

如果设备仍然可用:

>>>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
于 2017-05-10T10:42:08.167 回答