【问题标题】:Battery Level of Bluetooth devices using Java使用 Java 的蓝牙设备的电池电量
【发布时间】:2021-04-06 02:02:01
【问题描述】:

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

首先我从BlueCove 开始,并意识到BlueCove 只提供地址、简单名称等基本信息。经过进一步调查,发现读取特征的唯一方法是通过BLE GATT 服务。 因此开始编写基于 tinyb 的测试代码,该代码在 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 获取蓝牙设备的电量?

注意:

  1. 在 android 和 python 中有很多可用的示例,但不适用于 Java / windows
  2. 还发现了未回答的类似 C# 问题
    Get Bluetooth Device Battery Level

【问题讨论】:

    标签: java windows bluetooth bluetooth-lowenergy bluetooth-gatt


    【解决方案1】:

    有两种类型的适配器,每种都有优缺点。

    • 通用适配器(由 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 首选)

    最后说明:

    TinyB transport 不支持 Windows 操作系统。对于 Windows 操作系统,您需要获得一个 BlueGiga 适配器。您只能在 Linux 环境中使用您的英特尔无线适配器。

    【讨论】:

    猜你喜欢
    • 2016-03-21
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多