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 扫描附近的蓝牙设备的更多相关文章

  1. Android学习——蓝牙通讯

    蓝牙蓝牙,是一种支持设备短距离通信(一般10m内,且无阻隔媒介)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑等众多设备之间进行无线信息交换.利用“蓝牙”技术,能够有效的简化移动通信终端 ...

  2. android 蓝牙通讯编程 备忘

    1.启动App后: 判断->蓝牙是否打开(所有功能必须在打牙打开的情况下才能用) 已打开: 启动代码中的蓝牙通讯Service 未打开: 发布 打开蓝牙意图(系统),根据Activity返回进场 ...

  3. Android蓝牙通讯【转】

    本文转载自:http://blog.csdn.net/vnanyesheshou/article/details/51554852 随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了. 总结了下蓝牙 ...

  4. android蓝牙通讯开发(详细)

    新建一个工程之后,我们可以先看到界面左边的项目栏,我们可以看到,除了app目录以外,大多数的文件和目录都是自动生成的,我们也不需要对他们进行修改,而app目录之下的文件才是我们工作的重点.下面,我先对 ...

  5. iOS开发之蓝牙通讯

    iOS开发之蓝牙通讯 一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的CoreBluetooth.framework进行 ...

  6. Java 线程间通讯(管道流方式)

    一.管道流是JAVA中线程通讯的常用方式之一,基本流程如下: 1)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2)将pos和pis匹配 ...

  7. Java 线程间通讯(共享变量方式)

    Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...

  8. iOS开发--通过MultipeerConnectivity完成蓝牙通讯

    iOS开发–通过MultipeerConnectivity完成蓝牙通讯 iOS蓝牙通讯的三种方式: GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS7开始过期,但是目前已经被淘 ...

  9. PC端 java 开发蓝牙所遇到的问题

    由于项目的原因.要在电脑上开发一个通过蓝牙传送数据的client.我採用的是JAVA,JSME开发. client:去搜素蓝牙信号,然后找到对应的蓝牙信号进行连接. 服务端:client须要进行连接的 ...

  10. 浅谈Bluetooth蓝牙开发

    前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...

随机推荐

  1. css动画效果(边框流光闪烁阴影效果)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa7odDQYuaatklJUMc5anU10PWLAt14rNnNUD6oHJG9U63fc0y ...

  2. My SQL 下载和安装图文解说

    一.下载My SQL 官网下载地址:https://downloads.mysql.com/archives/installer/ 选择需要下载的版本,点击download.本文选择下载的版本是8.0 ...

  3. 你还用ES存请求日志?ClickHouse+Vector打造最强Grafana日志分析看板

    为什么要做NGINX日志分析看板 Grafana官网的dashboards有NGINX日志采集到ES数据源的展示看板,也有采集到LOKI数据源的展示看板,唯独没有采集到ClickHouse数据源的展示 ...

  4. 看图认识HTML5

    教程: https://www.w3.org/TR/html52 https://www.w3cschool.cn/html5/ https://www.runoob.com/html/html5-i ...

  5. CF939 D

    CF939 D 让你把区间分成 \(k\) 段, 段内用 \(xor\) 连接, 段之间用 \(or\) 连接,问你在结果不大于 \(x\) 的前提下, \(k\) 的最大值 \(1 \leq n \ ...

  6. Lattice ICE40LP8K开发

    一.开发工具: ICEcube2,界面非常原始,只有PLL IP核添加功能,其他IP核貌似只能使用primitive替换. 不支持时序分析.在线仿真等功能. 二.原语使用 全局布线资源 在 iCE40 ...

  7. Cursor使用

    Cursor是一款AI 代码编辑器,官网地址为https://www.cursor.com/,直接在官网下载安装即可,基于VS Code二次开发而来,之所以没有采用插件方式,在官方网站上给出的答案是某 ...

  8. delphi Image32 之 快速入门

    官方快速入门,加上了一些注解 [从WORD粘贴后失去了样式] TImage32 类是关键.TImage32 对象包含单个图像,所有图像操作都作用于此对象. uses Img32;  //引用单元 .. ...

  9. 【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?

    [云智AI运动识别小程序插件],可以为您的小程序,赋于人体检测识别.运动检测识别.姿态识别检测AI能力.本地原生识别引擎,无需依赖任何后台或第三方服务,有着识别速度快.体验佳.扩展性强.集成快.成本低 ...

  10. 读书笔记-C#8.0本质论-04

    18. 多线程 18.1 多线程基础 处理器受限延迟(Processor-bound latency):假定一个计算需要执行120亿次算术运算,而总共的处理能力是每秒60亿次,那么从请求结果到获得结果 ...