java - 使用 Java 的蓝牙设备的电池电量
问题描述
我正在尝试构建一个简单的 java 程序,它在windows中显示连接的蓝牙设备的电池状态。请参见下面的示例图像。
首先,我从BlueCove开始,并意识到 BlueCove 仅提供地址、简单名称等基本信息。经过进一步调查,发现读取特征的唯一方法是通过 BLE GATT 服务。因此开始编写基于GitHub蓝牙管理器项目中的tinyb的测试代码,结果出现异常
到目前为止,我已经尝试过这段代码
import org.sputnikdev.bluetooth.URL;
import org.sputnikdev.bluetooth.manager.CharacteristicGovernor;
import org.sputnikdev.bluetooth.manager.impl.BluetoothManagerBuilder;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
public class B2 {
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
new BluetoothManagerBuilder()
.withTinyBTransport(true)
.withBlueGigaTransport("^*.$")
.build()
.getCharacteristicGovernor(new URL("/XX:XX:XX:XX:XX:XX/F7:EC:62:B9:CF:1F/"
+ "0000180f-0000-1000-8000-00805f9b34fb/00002a19-0000-1000-8000-00805f9b34fb"), true)
.whenReady(CharacteristicGovernor::read)
.thenAccept(data -> {
System.out.println("Battery level: " + data[0]);
}).get();
}
}
马文
<dependencies>
<dependency>
<groupId>org.sputnikdev</groupId>
<artifactId>bluetooth-manager</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.sputnikdev</groupId>
<artifactId>bluetooth-manager-tinyb</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
例外
Exception in thread "main" java.lang.IllegalStateException: java.lang.IllegalStateException: Native libraries for TinyB transport could not be loaded.
at org.sputnikdev.bluetooth.manager.impl.BluetoothManagerBuilder.loadTinyBTransport(BluetoothManagerBuilder.java:225)
at org.sputnikdev.bluetooth.manager.impl.BluetoothManagerBuilder.build(BluetoothManagerBuilder.java:190)
at B2.main(B2.java:15)
Caused by: java.lang.IllegalStateException: Native libraries for TinyB transport could not be loaded.
at org.sputnikdev.bluetooth.manager.impl.BluetoothManagerBuilder.loadTinyBTransport(BluetoothManagerBuilder.java:218)
... 2 more
我的问题-> 还有其他方法可以使用 JAVA 获取蓝牙设备的电池电量吗?
笔记 :
- 在 android 和 python 中有很多可用的示例,但不适用于 Java / windows
- 还发现未回答的类似 C# 问题
Get Bluetooth Device Battery Level
解决方案
有两种类型的适配器,每种都有优点和缺点。
通用适配器(由 TinyB Transport 支持)。这些是最常见的适配器,很可能您已经拥有一个,或者它嵌入到您的 PC/笔记本电脑中。但是,有一个主要缺点 - 它仅适用于基于Linux的环境,更准确地说,它需要在您的操作系统中安装Bluez软件。
BlueGiga 串行适配器(受 BlueGiga Transport 支持)。这是一种非常罕见的特殊类型的蓝牙适配器。最常见的一种是Bluegiga BLED112。选择 BlueGiga 适配器的主要标准是它必须支持BGAPI。
笔记:
要使用bluetooth-manager-tinyb,您必须将 Bluez 软件升级到 5.43+。这是由于 Bluez 5.43v 中的 DBus API 发生了一些变化。(Bluez 5.44v、Bluez 5.45v、Bluez 5.46v、Bluez 5.47v 首选)
最后注:
不支持 Windows 操作系统TinyB transport
。对于 Windows 操作系统,您将需要一个BlueGiga
适配器。您只能在 Linux 环境中使用您的英特尔无线适配器。
推荐阅读
- r - 使用 R 从 PDF 提取/解析为 CSV?
- java - Kotlin 中的枚举类对于 Android 来说是否像 Java 中的“昂贵”?
- c# - 迁移已创建的表 Entity Framework
- c# - 为索引视图控制器进行多重连接时出现问题
- sql - 希望根据价格列中的最后两位数字过滤查询
- c# - C# Text-Based Game 读取为没有错误但在第一次选择后关闭
- python - 升级 Pandas - PermissionError: [Errno 13] Permission denied: '/usr/local/lib64/python3.6/site-packages/numpy'
- javascript - 使用 react-select 选择选项后如何继续输入?
- css - 按钮加载指示器边框动画
- javascript - findOneAndUpdate 中的文档未更新