我正在尝试构建一个简单的Java程序,该程序在窗口中显示已连接的蓝牙设备的电池状态。请参见下面的示例图像。
java - 使用Java的蓝牙设备的电池电量-LMLPHP
首先,我从BlueCove开始,意识到BlueCove仅提供诸如地址,简单名称等基本信息。在进一步研究之后,发现读取特征的唯一方法是通过BLE GATT服务。
因此开始在GitHub tinyb项目中发现基于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 Transport支持)。这些是最常见的适配器,很可能您已经有一个适配器,或者它已嵌入到PC/笔记本电脑中。但是,有一个主要缺点-它仅在基于 Linux 的环境中有效,更确切地说,它要求在操作系统中安装 Bluez 软件。
  • BlueGiga串行适配器(由BlueGiga Transport支持)。这是一种非常罕见的特殊类型的蓝牙适配器。最常见的一种是Bluegiga BLED112。选择BlueGiga适配器的主要标准是它必须支持BGAPI

  • 下表显示了每种适配器类型支持的一些主要功能。
    java - 使用Java的蓝牙设备的电池电量-LMLPHP
    笔记:
    要使用 bluetooth-manager-tinyb ,您必须将Bluez软件升级到5.43+。这是由于Bluez 5.43v中的DBus API中的某些更改所致。 (首选Bluez 5.44v,Bluez 5.45v,Bluez 5.46v,Bluez 5.47v)
    最后说明:TinyB transport不支持Windows操作系统。对于Windows操作系统,您将需要获得BlueGiga适配器。您只能在Linux环境中使用英特尔无线适配器。

    关于java - 使用Java的蓝牙设备的电池电量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65492179/

    10-13 05:05