Java Bluetooth 蓝牙通讯 BlueCove 扫描附近的蓝牙设备

news/2025/1/8 19:08:02/文章来源:https://www.cnblogs.com/vipsoft/p/18660378

目录
  • BlueCove项目概述
    • BlueCove API架构
      • API的设计原则和实现方式
      • 关键类和方法的功能描述
  • 测试代码
    • 获取本机(PC)蓝牙
    • 扫描蓝牙

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());}
}

image

扫描蓝牙

  • 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 {@Overridepublic 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();}}@Overridepublic void servicesDiscovered(int i, ServiceRecord[] serviceRecords) {for (ServiceRecord record : serviceRecords) {System.out.println("Service discovered: " + record.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));}}@Overridepublic void serviceSearchCompleted(int i, int i1) {System.out.println("Service search completed");}@Overridepublic void inquiryCompleted(int i) {System.out.println("搜索完成");synchronized (inquiryCompletedEvent) {inquiryCompletedEvent.notifyAll();}}}
}

image

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/866020.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英伟达世界基础模型 Cosmos,教 AI 理解物理世界;阿里通义与雷鸟合作推出 AI 眼镜丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑的…

.NET 窗口置于最顶层

本文介绍如何将窗口置于最顶层,以及解决在顶层显示时对锁屏登录界面的影响。用于实现类似Launcher、系统工具等应用需要窗口层级比Windows开始菜单以及置顶任务栏还要高的场景 一般情况下的窗口置顶,可以设置WPF窗口属性Topmost=true 也可以使用WIN32-SetWindowPos函数SetWin…

汽修行业的智能化转型:AI赋能员工培训SOP策略

随着智能化技术的飞速发展,汽修行业也迎来了前所未有的变革机遇。在这一背景下,如何构建高效、标准化的员工培训SOP(Standard Operating Procedure)策略,成为汽修企业提升竞争力、实现智能化转型的关键。本文将探讨智能AI在汽修行业员工培训SOP策略构建中的应用,特别是提…

智慧医疗新纪元:帮助中心引领的智能化转型之路

在科技日新月异的今天,智慧医疗已经成为医疗领域发展的重要趋势。智慧医疗不仅意味着医疗设备的智能化,更代表着整个医疗服务流程的数字化转型。在这一变革过程中,如何有效利用帮助中心驱动医疗机构的转型与升级,成为了一个值得深入探讨的课题。本文将探讨智慧医疗的智能跃…

sqlalchemy.exc.OperationalError

最后发现是 密码中含特殊字符@导致的连接报错其他参考: sqlalchemy.exc.OperationalError通常指示Python应用程序与数据库之间的连接出现问题。这里有一些可能的原因和解决方案:数据库连接参数错误:检查你的数据库连接字符串(DSN)。确保主机名、端口、数据库名称、用户名和…

五大优势:开源AI视频监控助力精准打击公租房非法倒卖行为

一. 用户痛点:传统监控面临的挑战与隐患 公租房作为社会保障性住房的一种,旨在为低收入群体提供基本的居住保障。然而,随着市场上房地产倒卖行为的增多,许多公租房被非法转租或倒卖给非资格居民,导致公租房资源流失、社会公平受损。政府在这方面的监管面临诸多困难,传统的…

Omnivore 替代品 Readeck 安装与使用教程

前段时间 Omnivore 宣布服务关停,作为一个长期使用 Omnivore 的用户,我需要寻找替代方案。 我对替代品的核心需求是:浏览器插件:支持一键剪藏当前网页。 RSS 支持:能够输入 RSS 地址并定时抓取更新。 API 接口:可以通过 API 与我的 logseq 进行集成。寻找替代品的过程: …

前端之canvas实现电子签约完成线上签署功能

电子签名,下载带有签名的合同png/pdf格式,前端/vue实现电子签功能。最近发现现在租房还是签合同,越来越多采用电子签约的方式进行,好处不用多说节约成本,节约时间。抱着好奇的心理,尝试自己动手实现一个电子签。原来并不复杂主要通过了canvas绘画能力进行实现的。最近发现…

git怎么玩

首先如果是windos下个git bash 1.自己用git,用于本地和github的交互!

电流传感器HLSR50-P KX022-1020加速度计 LM27761DSGR稳压器 MAX14752EUE SAF7755HV音频 DSP规格、产品特征、及应用

分享电流传感器HLSR50-P KX022-1020加速度计 LM27761DSGR稳压器 MAX14752EUE SAF7755HV音频 DSP规格、产品特征、及应用1、HLSR50-P是一款开环霍尔效应电流传感器,主要用于电子测量直流、交流和脉冲电流,同时确保初级和次级电路之间的电隔离。HLSR50-P 电流传感器规格用于测量…

招行面试: 分布式调度 设计,要考虑 哪些问题?

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

Idea中集成SceneBuilder以及使用讲解

目录1 Idea中集成SceneBuilder1.1 Idea中集成SceneBuilder1.2 SceneBuilder1.2.1 添加组件ControlsFX1.2.1.1页面展示1.2.2 hierarchy displays1.3 简单使用1.3.1 搭建项目1.3.2 fxml文件1.3.3 生成exe文件2 SceneBuilder页面讲解2.1 Properties窗口预览2.2 Text面板2.2.1 Text…