使用java的蓝牙设备的电池级别

unftdfkk  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(520)

我正在尝试建立一个简单的java程序,显示在windows中连接的蓝牙设备的电池状态。请参见下面的示例图像。

首先我从bluecove开始,意识到bluecove只提供地址、简单名称等基本信息。。经过进一步的调查,发现只有通过gatt服务才能解读这一特点。因此,我们开始编写一个基于tinyb的测试代码,该代码是在github蓝牙管理器项目中发现的,它导致了一个异常
到目前为止,我已经尝试了这个代码

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#问题
获取蓝牙设备电池电量

vc9ivgsu

vc9ivgsu1#

适配器有两种类型,每种类型都有优缺点。
通用适配器(由tinyb传输支持)。这些是最常见的适配器,很可能您已经有一个或它是嵌入到您的pc/笔记本电脑。但是,它有一个主要缺点-它只在基于linux的环境中工作,更准确地说,它需要在操作系统中安装bluez软件。
bluegiga串行适配器(受bluegiga传输支持)。这是一种非常罕见的特殊类型的蓝牙适配器。其中最常见的是bluegiga bled112。选择bluegiga适配器的主要标准是它必须支持bgapi。
下表显示了每种适配器类型支持的一些主要功能。

注:
要使用bluetooth manager tinyb,必须将bluez软件升级到5.43+。这是由于bluez5.43v中dbusapi发生了一些变化(蓝色Z 5.44v、蓝色Z 5.45v、蓝色Z 5.46v、蓝色Z 5.47v优先)
最后说明:
不支持windows操作系统 TinyB transport . 对于windows操作系统,您需要 BlueGiga 适配器。您只能在linux环境中使用intel无线适配器。

相关问题