使用 Java 的蓝牙设备的电池电量
Battery Level of Bluetooth devices using Java
我正在尝试构建一个简单的 java 程序,它在 windows 中显示已连接蓝牙设备的电池状态。请参阅下面的示例图片。
首先我从 BlueCove 开始,发现 BlueCove 只提供基本信息,如地址、简单名称等。经过进一步调查,发现只能通过 BLE GATT 服务读取特征。
因此开始编写基于 tinyb which was found in GitHub Bluetooth-manager 项目的测试代码,结果出现异常
到目前为止我已经尝试过这段代码
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();
}
}
Maven
<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 传输支持)。这些是最常见的适配器,很可能您已经拥有或嵌入到您的 PC/Laptop 中。但是,有一个主要缺点 - 它只能在基于 Linux 的环境中工作,更准确地说,它需要安装 Bluez 软件在你的 OS.
BlueGiga 串行适配器(受 BlueGiga 传输支持)。这是一种非常罕见的特殊类型的蓝牙适配器。最常见的一种是 Bluegiga BLED112. The main criteria in selecting a BlueGiga adapter is that it must support BGAPI.
下面的 table 显示了每种适配器类型支持的一些主要功能。
注:
要使用 bluetooth-manager-tinyb,您必须将 Bluez 软件升级到 5.43+。这是由于 Bluez 5.43v 中的 DBus API 发生了一些变化。 (首选 Bluez 5.44v、Bluez 5.45v、Bluez 5.46v、Bluez 5.47v)
最后的注释:
Windows OS 不受 TinyB transport
支持。对于 Windows OS,您需要获得一个 BlueGiga
适配器。您只能在 Linux 环境中使用英特尔无线适配器。
我正在尝试构建一个简单的 java 程序,它在 windows 中显示已连接蓝牙设备的电池状态。请参阅下面的示例图片。
首先我从 BlueCove 开始,发现 BlueCove 只提供基本信息,如地址、简单名称等。经过进一步调查,发现只能通过 BLE GATT 服务读取特征。 因此开始编写基于 tinyb which was found in GitHub Bluetooth-manager 项目的测试代码,结果出现异常
到目前为止我已经尝试过这段代码
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();
}
}
Maven
<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 传输支持)。这些是最常见的适配器,很可能您已经拥有或嵌入到您的 PC/Laptop 中。但是,有一个主要缺点 - 它只能在基于 Linux 的环境中工作,更准确地说,它需要安装 Bluez 软件在你的 OS.
BlueGiga 串行适配器(受 BlueGiga 传输支持)。这是一种非常罕见的特殊类型的蓝牙适配器。最常见的一种是 Bluegiga BLED112. The main criteria in selecting a BlueGiga adapter is that it must support BGAPI.
下面的 table 显示了每种适配器类型支持的一些主要功能。
注:
要使用 bluetooth-manager-tinyb,您必须将 Bluez 软件升级到 5.43+。这是由于 Bluez 5.43v 中的 DBus API 发生了一些变化。 (首选 Bluez 5.44v、Bluez 5.45v、Bluez 5.46v、Bluez 5.47v)
最后的注释:
Windows OS 不受 TinyB transport
支持。对于 Windows OS,您需要获得一个 BlueGiga
适配器。您只能在 Linux 环境中使用英特尔无线适配器。