Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备(测试代码)

 更新时间:2025年01月09日 08:53:32   作者:VipSoft  
BlueCove是一个开源的蓝牙协议栈实现,旨在为Java开发者提供一个全面的、易于使用的API,从而在应用程序中实现蓝牙功能,该项目支持多种操作系统,这篇文章主要介绍了Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备,需要的朋友可以参考下

BlueCove项目概述

BlueCove是一个开源的蓝牙协议栈实现,旨在为Java开发者提供一个全面的、易于使用的API,从而在应用程序中实现蓝牙功能。该项目支持多种操作系统,包括Windows、Linux和Mac OS X,并且能够与多种蓝牙硬件设备兼容。
BlueCove项目对这些协议的广泛支持,使得开发人员能够为不同类型的蓝牙设备开发应用程序,而不必担心兼容性问题。

BlueCove API架构

API的设计原则和实现方式

BlueCove API是一套Java语言的开源蓝牙API实现,它为Java应用提供了访问蓝牙设备和进行蓝牙通信的能力。API的设计遵循了Java的设备无关性原则,提供了一套统一的编程接口,使得开发者可以在不关心具体蓝牙硬件实现的情况下,编写跨平台的蓝牙应用。

API的实现主要依赖于底层的蓝牙硬件抽象层(HAL)来与蓝牙硬件进行交互。BlueCove使用Java本地接口(JNI)技术与底层操作系统以及蓝牙硬件进行通信。通过这种方式,BlueCove能够运行在支持JNI的多种平台上。

关键类和方法的功能描述

在BlueCove API中,有一些关键的类和方法需要特别注意。例如, BluetoothAdapter 类提供了访问蓝牙适配器(即蓝牙硬件)的方法。通过这个类,可以进行设备发现、获取已配对的设备列表、管理设备配对等操作。

另一个重要的类是 BluetoothDevice ,它代表一个远程蓝牙设备。这个类允许应用程序查询设备信息、发起连接、以及与远程设备进行数据通信。

此外, BluetoothSocket 类则是用于建立数据连接的。它使得通过蓝牙网络套接字进行数据传输成为可能。开发者可以通过这个类的实例来进行数据发送和接收,实现应用程序之间的数据交换。

测试代码

获取本机(PC)蓝牙

添加引用

<dependency>
    <groupId>io.ultreia</groupId>
    <artifactId>bluecove</artifactId>
    <version>2.1.1</version>
</dependency>

打印PC蓝牙名称

import javax.bluetooth.*;
 
public class BlueCoveTest {
    public static void main(String[] args) {
        LocalDevice localDevice = LocalDevice.getLocalDevice();
        System.out.println("Local Device Name: " + localDevice.getFriendlyName());
    }
}

扫描蓝牙

  • DiscoveryAgent.GIAC:一般的不受限的发现模式;
  • DiscoveryAgent.LIAC:受限的发现模式,具体情况取决于API的具体实现;
  • DiscoveryAgent.NOT_DISCOVERABLE:不可被发现。
package com.vipsoft.boot;

import javax.bluetooth.*;
import java.io.IOException;

public class BleDiscoverDevices {

    final static Object inquiryCompletedEvent = new Object();

    public static void main(String[] args) {
        try {
            synchronized (inquiryCompletedEvent) {
                // 获取本地蓝牙设备
                LocalDevice localDevice = LocalDevice.getLocalDevice();
                // 获取蓝牙设备管理器
                DiscoveryAgent agent = localDevice.getDiscoveryAgent();
                // 设置设备发现监听器
                DeviceDiscoveryListener listener = new DeviceDiscoveryListener();
                // 开始发现附近的蓝牙设备
                boolean started = agent.startInquiry(DiscoveryAgent.GIAC, listener);
                if (started) {
                    System.out.println("开始搜索...");
                    inquiryCompletedEvent.wait();
                    agent.cancelInquiry(listener);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static class DeviceDiscoveryListener implements DiscoveryListener {
        @Override
        public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) {
            try {
                String deviceName = remoteDevice.getFriendlyName(false);
                String address = remoteDevice.getBluetoothAddress();
                System.out.println("发现蓝牙设备 Address: " + address + " Device: " + deviceName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void servicesDiscovered(int i, ServiceRecord[] serviceRecords) {
            for (ServiceRecord record : serviceRecords) {
                System.out.println("Service discovered: " + record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
            }
        }

        @Override
        public void serviceSearchCompleted(int i, int i1) {
            System.out.println("Service search completed");
        }

        @Override
        public void inquiryCompleted(int i) {
            System.out.println("搜索完成");
            synchronized (inquiryCompletedEvent) {
                inquiryCompletedEvent.notifyAll();
            }
        }
    }
}

源码:https://gitee.com/VipSoft/VipBoot/tree/develop/vipsoft-bluetooth

到此这篇关于Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备(测试代码)的文章就介绍到这了,更多相关Java Bluetooth 蓝牙通讯 BlueCove 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Java中Object类的几个方法示例

    关于Java中Object类的几个方法示例

    这篇文章主要给大家介绍了关于Java中Object类的几个方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    这篇文章主要介绍了Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java日志框架之logback使用详解

    Java日志框架之logback使用详解

    这篇文章主要介绍了Java日志框架之logback使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java使用BigDecimal公式精确计算及精度丢失问题

    Java使用BigDecimal公式精确计算及精度丢失问题

    在工作中经常会遇到数值精度问题,比如说使用float或者double的时候,可能会有精度丢失问题,下面这篇文章主要给大家介绍了关于Java使用BigDecimal公式精确计算及精度丢失问题的相关资料,需要的朋友可以参考下
    2023-01-01
  • java中不定长参数的实例用法

    java中不定长参数的实例用法

    在本篇文章里小编给大家分享的是关于java中不定长参数的使用方法以及相关代码内容,有兴趣的朋友们可以学习参考下。
    2020-02-02
  • 基于Java实现缓存Cache的深入分析

    基于Java实现缓存Cache的深入分析

    本篇文章是对Java实现缓存Cache进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Spring Boot+RabbitMQ 通过fanout模式实现消息接收功能(支持消费者多实例部署)

    Spring Boot+RabbitMQ 通过fanout模式实现消息接收功能(支持消费者多实例部署)

    这篇文章主要介绍了Spring Boot+RabbitMQ 通过fanout模式实现消息接收(支持消费者多实例部署),本文通过案例场景分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • IDEA中Git的基本应用详解

    IDEA中Git的基本应用详解

    这篇文章主要介绍了IDEA中Git的基本应用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 解决spring boot启动扫描不到自定义注解的问题

    解决spring boot启动扫描不到自定义注解的问题

    这篇文章主要介绍了解决spring boot启动扫描不到自定义注解的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java文档注释超详细讲解

    Java文档注释超详细讲解

    这篇文章主要给大家介绍了关于Java文档注释的相关资料,文档注释主要是用来生成java开发文档javadoc的,生成的开发文档和Java本身的API帮助文档是一样的,需要的朋友可以参考下
    2023-10-10

最新评论