读取电池状态蓝牙耳机linux

Posted

技术标签:

【中文标题】读取电池状态蓝牙耳机linux【英文标题】:Read battery status bluetooth headset linux 【发布时间】:2019-06-07 14:41:55 【问题描述】:

我使用使用蓝牙 4.1 版的蓝牙耳机。当我连接安卓时,它会显示电池状态。但是使用 Linux (Ubuntu 18.04) 我无法获得电池状态。我尝试使用bluetoothctl,在/sys/class/power_supply 中查找文件,就像其他问题一样,但他们没有帮助我。

askubuntu.com/questions/53880/is-there-any-way-to-check-the-battery-percentage-of-apple-wireless-peripherals

***.com/questions/49078659/check-battery-level-of-connected-bluetooth-device-on-linux

我的蓝牙设备不使用 GATT 配置文件。它使用 A2DP 接收器来传输音频。

我查看了 Bluez 文档。他们都说是做 GATT profile 并获取属性。

有没有办法在 Linux 中正确地读取电池状态? android设备如何获取电池状态?是不是 Linux 蓝牙栈的弱点?

【问题讨论】:

您的设备很可能正在使用电池电量的自定义属性。您可以尝试以下操作并发布输出:- 运行“bluetoothctl”,然后运行“menu gatt”,然后运行“list attributes [dev]”并将 [dev] 替换为耳机的蓝牙地址。 @YoussifSaeed 当我输入 menu gattlist-attributes [device-mac] 时,它什么也不打印。 @mimix2 也许在这里看看我的答案:***.com/a/55008142/6267288。目前尚不清楚 Bluez DBUS org.bluez.Battery1 是否特定于 GATT。快速查看代码,它看起来与 GATT 相关,但我可能错了。 @LakinduAkash 你需要先connect [device-mac]menu gatt 【参考方案1】:

自this pull request by Dmitry Sharshakov 起,PipeWire 支持报告电池状态(使用 Apple HFP AT 命令的设备)。它使用 bluez 的 Battery Provider API,该 API 仍处于试验阶段,仅当 bluetoothd-E 标志启动时可用。

在 Arch Linux 上运行应该足够了

cp /usr/lib/systemd/system/bluetooth.service /etc/systemd/system/
sed -i -r 's/ExecStart=.+/& -E/' /etc/systemd/system/bluetooth.service
systemctl daemon-reload
systemctl restart bluetooth

应该会显示耳机电池电量。要以编程方式获取电池电量,您可以使用 UPower 的 DBus API。

【讨论】:

以上是关于读取电池状态蓝牙耳机linux的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上检查连接的蓝牙设备的电池电量

如何查看蓝牙耳机的剩余电池电量

手机怎样显示蓝牙耳机的电量

Android 蓝牙 le gatt 特征通知问题

蓝牙 4.0 真的会减少智能手机的电池消耗吗?

电池电量低于 40% 时是不是可以关闭蓝牙?